スクリプトを介してユーザーのcronに行を追加する方法はありますか?
私は通常crontab -e
を使用してそれを行いますが、シェルスクリプトを使用してこのタスクを自動化したいです。
次のように、現在のユーザーのcrontabの下部に行をエコーできます。
#!/bin/bash
line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -
Crontabの値を編集する場合は、次の行に沿って何かを行うことができます。
$ crontab -l | sed -e 's/foo/bar/' | crontab -
明らかに、変更したい行にのみ一致するように、置換に注意する必要があります。それ以外の場合、すべてのfoos
はbars
に変更されます(この例では)。
この方法の利点は、crontab全体を置き換えないことです。 (ハンマーではなく比meta的なピンセット。)
sedの代わりに、任意の編集コマンドを使用できます。たとえば、edを使用して、次のように始まる行を修正する場合:
2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1
この行は多くの行の中にあるか、異なるシステムで更新する多くの異なるcrontabがあり、flitch
という用語が含まれる行のみが行であることを知っているとします。
次のようになります。
$ cat /tmp/edscript
/flitch
s/3/9/
w
q
$ crontab -l > /tmp/out && ed /tmp/out < /tmp/edscript && crontab - < /tmp/out
$ crontab -l
...
2 * * 1 * /sbin/flitch --days 9,4 > /var/log/flitch.out 2>&1
...
今では、ほぼ100%の時間をsedがedが行うことを認めなければなりませんが、スイスアーミーナイフに追加のツールを用意しておくと良いでしょう。 ^。^