crontab に書ける機能少なく無いですか?
crontab の限界ってあるんですよ。波括弧使えたらもう少し楽に記述できるのに。
でも出来ないんですよ curly brace が使えない。
使えたらイイのにと思って調べたらとてもカンタンな解決方法が見つかった
やりかた
- cron で起動するシェルを bashにする
- bashの機能を用いて複数コマンドを実行する
- 方法1 波括弧
{ cmd_01; cmd_02;cmd_03;}
- 方法2 && に依る実行
cmd_01 && cmd_02 && cmd_03
cd などで、ワーキングディレクトリを変えて、crontab が実行されるディレクトリを変えるときに便利など。
使う方法
cron のシェルをbash にする。
cron は SHELL=sh
で動作しているので SHELL=bash
に切り替えてあげる。
記述例
crontab
SHELL=bash 0 12 * * * * { cd /var/www ; /var/scripts/my_command; } > /dev/null
これで、穏やかにシェルスクリプト実行をCRONで実行できそう.
例えば日付と曜日を条件に入れるなどの処理を書けそうですね。
波括弧で複数行を書くかわりが出来ますね
波括弧を使わない解決方法
スクリプトの実行ディレクトリを書き換える程度であれば、&&
で繋いであげれば実現可能
SHELL=sh 0 12 * * * * cd /var/www && /var/scripts/my_command
これでも出来ますけど、波括弧使えたほうが楽ですね。
注意点
SHELL=bash SHELL=sh
とサンプルで指定してるのには意味があって、{ command; command; }
はシェルの機能なので、使ってるシェルに依っては動作しなかったりするので注意が必要。私は bash なので特に問題なく動作している。
参考資料
http://stackoverflow.com/questions/24488962/why-cant-i-use-curly-brackets-in-crontab
2018-04-02
セミコロンの抜け修正。あと細かい記述を改訂