それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

cron/crontab で 複数行の実行には波括弧 {} を使う

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

セミコロンの抜け修正。あと細かい記述を改訂