プログラム的に(Ssh経由)crontabにいくつかのコンテンツを追加する

プログラム的に(Ssh経由)crontabにいくつかのコンテンツを追加する

配布スクリプトがあります。ユーザーに何かを追加する必要がありますcrontab (ログをクリーンアップするスクリプトをトリガーします)。XXX(1)ただし、これは初期展開中または更新が必要な場合にのみ実行できます。

(私は走っxxx.py deploy envたりxxx.py update env。)

だから私はこうする必要があります:

私のcronJobがすでに存在していることを確認してください。
私のcronJobがまだ存在しない場合は、送信してください。コマンドパラメータの1つが異なる場合は、
私のcronJobを更新してください。

crontab ファイルを使用しcrontab -eたり手動で編集したりすることなく、crontabアイテムを追加/確認/削除(ダウンロード、再作成、再アップロード)する方法がわかりません。

PS:これはユーザー固有のcronjobです。 "webadmin"はこれを行いますが、sudoこれには使用しないでください。

ベストアンサー1

これまで私の最高のアイデア

まず、コンテンツが必要なものと一致することを確認し、そうでない場合は更新してください。

if [[ $(crontab -l | egrep -v "^(#|$)" | grep -q 'some_command'; echo $?) == 1 ]]
then
    set -f
    echo $(crontab -l ; echo '* 1 * * * some_command') | crontab -
    set +f
fi

しかし、これはクローン操作を中心に別々のスクリプトを書く必要があるほど複雑になります。

他のアイデア

stdinを介してcrontabに文字列を送信できます(これにより、古いcrontabエントリが消去されます)。

echo "* 1 * * * some_command" | crontab -

SSH経由でも正常に動作します。

echo "* 1 * * * some_command" | ssh user@host "crontab -"

ファイルに追加するには、次のものを使用できます。

# on the machine itself
echo "$(echo '* 1 * * * some_command' ; crontab -l 2>&1)" | crontab -
# via ssh
echo "$(echo '* 1 * * * some_command' ; ssh user@host crontab -l 2>&1)" | ssh user@host "crontab -"

おすすめ記事