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


回答:


49

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

#!/bin/bash

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

+1 cuzあなたは私にそれを打ちました(テスト中にスクリプトエラーが発生しました:D)。あなたが追加する必要がある1つのこと:私は思う:cron変更されたシステムに通知する必要があります。
リンツウィンド

これは答えを得るためのレースになると知っていました!cronに通知する必要があるという点であなたは正しいです。これが、crontabの最後までコマンドをエコーすることができない理由です。上記のスクリプトが機能し、cronがコマンドの実行を開始することをテストしました。
リチャードホロウェイ

13
ああ、crontabそのユーザーがまだ存在しない場合、これもエラーになると思います(?)
Rinzwind

7
ユーザーcrontabが存在しない場合は警告が表示されますが、そうでない場合は作成されます。私はあなたのコメントを洞察に満ちたものとして支持しています。
リチャードホロウェイ

3

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%の時間でedが行うことをsedが行うことを認めなければなりませんが、スイスアーミーナイフに追加のツールを用意することは常に良いことです。^。^

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.