【Linux】cronを月末に実行したいときの設定

cronで月末に1回実行したいとき、
月によって月末の日付は変わるので、どう指定すればよいか。

実行される側で日付チェックを入れればよいのですが
それが難しい場合もあると思います。

cronの設定上で「翌日が1日ならば」という条件を入れることで対応できます。
testコマンドを使えば1行で書けます

毎日判定が行われるが嫌な人は

【PHP】cronでWEBアクセスと全く同じ動作を行いたい

ブラウザで動作するWEBシステムで、
使用しているプログラムをcronから呼んだらうまくいかない、
WEBアクセスしたときと結果が違う、
ということはないでしょうか。

cronからPHPをコマンドで実行した場合、
環境変数などの実行環境がWEBとは異なるため
全く同じ動作を行う保証がなく、予測しにくい不具合を生みます。

そこで私は、バッチ処理などでcronからphpを呼ぶ場合は
wgetを使っています。

こんな感じでwgetを呼ぶシェルをcronにセットするだけです。

batch.sh

これでWEBアクセスと同じ動作を行わせることができます。

重複実行防止処理はphp側で行っています。
もし時間のかかる処理ならwgetのオプションにタイムアウトの指定をします。

【Linux】全ユーザーのcron設定を一括でバックアップ

自身のcron設定をファイルに落とすには

こんな感じで簡単にできますが、
rootユーザー、adminユーザー、backupユーザーという風に
サーバー内で複数のユーザーがそれぞれcronでバッチ処理を実行しているとき、
それぞれのユーザーでバックアップをとるのは面倒なので、
rootで一気に全ユーザーのcronをバックアップしてしまいましょう。

cronの設定は、

というディレクトリに全ユーザーの設定が入っています。
rootユーザーで

などとするだけで全ユーザーのバックアップも簡単にできますね。

【Linux】”crontab -r”でいきなり削除されないようにする

cronの設定を編集するのは

ですが、
同じコマンドで

とやると、確認もなくいきなりcronの設定が削除されます。
eとrのキーは隣同士ですので、バックアップを取っていない状態で
うっかり削除してしまったら大変ですよね。

そこで、-rオプションが指定された場合に
毎回確認メッセージがでるようにします。
確認メッセージを出すには -i オプションをつける必要があるのですが、
-i オプションが強制的につくように.bashrcに設定しましょう。

~/.bashrc

これで、

と打った時に

というメッセージが表示され、
yと打たなければ実行されなくなります。
crontab -e には影響ありません。

もちろん、yを押すと削除されますので
万全を期するためにcronの内容は
定期的にバックアップをとるようにしましょう。

【Linux】cronで実行したら「コマンドが見つかりません」と言われる

シェルでコマンドを打てば実行されるのに、同じコマンドをcronで実行したら

と言われたことはありませんか?

cronで実行される場合の環境変数はシェルでログインして実行する場合とは異なります。
ですので実行するコマンドによってはパスが通っていない場合があり、自分でパスを通してやる必要があります。

どこにパスを通せばよいかわからないときはwhichでコマンドの場所を調べます。

あとは、パス付きでコマンドを記述するか、あるいは

でパスを通してからコマンドが実行されるようにします。