私はスクリプトを通して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_JOB
3つのことを行います。
- 現在の行を印刷し、次の行を読みます。 (
# SPECIAL_JOB
印刷可能) r
ファイルからジョブを読み取るd
次に、前の行# SPECIAL_JOB
(前のジョブ)を削除します。
答え3
より大きなスケールでansibleを使用することをお勧めします。