スクリプトを介してキーワードまたは文字列の後にcrontabに行を挿入する方法

スクリプトを介してキーワードまたは文字列の後にcrontabに行を挿入する方法

私はスクリプトを通してcrontabを編集する方法に関する多くのドキュメントがあることを知っています。以下を使用して項目を追加することでこれを行うことができました。

line="* * * * * /my/folder/script.sh"
( crontab -l ; echo "$line" ) | crontab -

しかし、私と他の何人かの人々はcrontabのスーパーユーザーの下に独自の「セクション」を持っています。

SPECIAL_JOB他の人のセクションやアイテムを妨げないように、埋め込み行の下など、キーワードや文字列の下にこの行を挿入するにはどうすればよいですか?私はcrontabの下部に新しいタスクを追加し続けたくありません。

cronエントリは次のとおりです。

# SPECIAL_JOB
* * * * * /my/folder/script.sh

理想的には、次を使用して単一の新しい項目を保持するために、その行の古い項目を削除します。

#remove entry
crontab -l | grep -ve '/my/folder/script.sh' | crontab -

答え1

これにより、# SPECIAL_JOBすべての行の後に文字列が挿入されます$line

crontab -l | sed '/# SPECIAL_JOB/a'"$line" | crontab -

答え2

テキストの特殊文字を置き換える際の問題を回避するには、新しいcronエントリをexampleというファイルに入れてから、次のようにしますnew-entry

{ crontab -l | sed '/^# SPECIAL_JOB/{
n
r /path/to/new-entry
d
}' } | crontab -

()サブシェル括弧を単純な中括弧に少し変更しました{}なぜなら、実際にサブシェルを作成する必要がないからです。

次に、sedを使用して着信テキストを解析します。で始まる行を見つけて、# SPECIAL_JOB3つのことを行います。

  1. 現在の行を印刷し、次の行を読みます。 (# SPECIAL_JOB印刷可能)
  2. rファイルからジョブを読み取る
  3. d次に、前の行# SPECIAL_JOB(前のジョブ)を削除します。

答え3

より大きなスケールでansibleを使用することをお勧めします。

関連情報