web-dev-qa-db-ja.com

スクリプトからcronに行を追加します

スクリプトを介してユーザーのcronに行を追加する方法はありますか?

私は通常crontab -eを使用してそれを行いますが、シェルスクリプトを使用してこのタスクを自動化したいです。

39
Adam Matan

次のように、現在のユーザーのcrontabの下部に行をエコーできます。

#!/bin/bash

line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -
49

Crontabの値を編集する場合は、次の行に沿って何かを行うことができます。

$ crontab -l | sed -e 's/foo/bar/' | crontab -

明らかに、変更したい行にのみ一致するように、置換に注意する必要があります。それ以外の場合、すべてのfoosbarsに変更されます(この例では)。

この方法の利点は、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%の時間をsededが行うことを認めなければなりませんが、スイスアーミーナイフに追加のツールを用意しておくと良いでしょう。 ^。^

3
fbicknel