2012-12-23 12 views
10

Bash/Shellを使用してCrontabタスクを有効または無効にする方法はありますか?Bash/ShellによるCrontabのタスクの有効/無効

したがって、ユーザーがサーバー1を起動すると、サーバー1のCrontab行などが有効になります。 ユーザーがサーバー1を停止すると、サーバー1のCrontab行が無効になります(#)。 これは可能ですか?

crontab -l | sed "/^#.*Server $SERVERNUM check/s/^#//" | crontab - 

を無効にする:有効にするには、事前

*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
+0

すべてのスクリプトで使用するセンチネルディレクトリを使用して、それぞれのスクリプトが期待しているセンチネルがあるかどうかチェックします。実行しない場合は実行を中止します – fge

答えて

14
SERVERNUM=$1 

おかげ

crontab -l | sed "/^[^#].*Server $SERVERNUM check/s/^/#/" | crontab - 

トランスクリプト:

[email protected]$ crontab -l 
*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
[email protected]$ crontab -l | sed '/^[^#].*Server 1 check/s/^/#/' | crontab - 
[email protected]$ crontab -l 
#*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
[email protected]$ crontab -l | sed '/^#.*Server 1 check/s/^#//' | crontab - 
[email protected]$ crontab -l 
*/1 * * * * Server 1 check 
*/1 * * * * Server 2 check 
*/1 * * * * Server 3 check 
+0

#を追加/ crontab。 オン= */1 * * * *サーバー1のチェック オフ=#*/1 * * * *サーバー1のチェック – user1621988

+0

私のシステムで試したところ、うまくいきました。 – Barmar

+0

Wonderfull、これは私が直面している唯一の問題は、サーバー番号をBashでダイナミックにすることです。問題は#$ *サーバー$ 1チェック/動作しません。だから、どのように変数$ 1を数値に渡すのですか? – user1621988

2

私はあなたのcronジョブをサーバーごとのスクリプトごとに/etc/cron.dに追加することをお勧めします。 cronジョブを実行する必要がある場合は、cronスクリプトでマーカーファイルをスキャンします。

+0

もう1つの一般的なやり方は '/ path/to/servers'ディレクトリと' run-parts/path/to/servers'のcronジョブだけです。それから、サーバanountsを無効にして 'servers'ディレクトリにあるファイルの名前を変更するか、ファイルを削除します。 ( 'run-parts'はDebian固有のものですが、あなたのプラットフォームにそれがない場合は、自分のものを動かすのは難しくありません)。 – tripleee

0

これは変種ですが、私は毎晩自分自身をロードするcronジョブを使用します。私はファイルを編集するだけで、毎晩午後10時にリロードされます。リロードをより頻繁に行うことができます。私はノードごとにファイルのディレクトリを保持しています。そのトリックは、誰もリロードラインをコメントアウトしないようにすることです。

0 22 * * * crontab /home/ME/cron_files/NODE 
0

迅速かつ厄介な修正として、適切なcronスクリプトの実行許可を有効または無効にすることができます。

など。あなたは自動的に(I/Oを消費することができます)そのデータベースを更新するから見つけ防ぐために好きなら:

cd /etc/cron.daily 

sudo chmod a-x locate 

これはcronのフレームワークに対してかもしれないが、それはすぐに適用され、それが当面のニーズの場合に動作します。

関連する問題