2019年最初の投稿は「cron 用の実行ファイル名には . を入れてはいけない備忘録」でスタートです.
これまで全く気が付いてなかったんですが,cron 用の実行ファイル名って色々制限があるんですね.年度末にいろいろ個人的なサーバーのメインテナンスをしていて初めて気がつきました.
具体的には,最近のUnix系のサーバーはだいたい,
- /etc/cron.mimutely: 分単位の定期処理実行ファイルを配置するフォルダ
- /etc/cron.hourly: 時間単位の定期処理実行ファイルを配置するフォルダ
- /etc/cron.weekly: 週単位の定期処理実行ファイルを配置するフォルダ
- /etc/cron.monthly: 月単位の定期処理実行ファイルを処理するフォルダ
ってのがあり,この中に定期実行したいことに対応する実行ファイル,もしくはスクリプトを入れとけば cron で自動的に実行されるハズなのに,なぜだか自作スクリプトを入れても実行してくれない.これ,原因は,
ファイル名に「.」が入っていたこと
でした.もう少し正確に言うと,多くの場合,
ASCII の大文字小文字と ASCII の数字,ASCII のアンダースコアと ASCII のマイナス・ハイフン
だけがファイル名として使えるみたい.
これ,cron の制限というよりも,cron が cron.weeky なんかのフォルダ以下のファイルを実行するために使う run-parts の制限です(/etc/crontab 辺りから呼び出される.ディストリビューションにより多少の違いはあるみたいです).
したがって,例えば,test.sh なんかのファイル名のシェルスクリプトを/etc/cron.weekly 以下に配置してもダメな訳ですね.なお,cron 自体の呼び出すファイル名にはこういう制限はないようで,一般ユーザーが crontab -e で登録する定期実行ファイルであれば,別に test.sh というファイル名でも良いみたい.
これまで長いこと使ってきましたが,全く知りませんでした.実行されないのは,自分の作ったスクリプトに何かの問題があるのかとしばらく試行錯誤してしまいました.
以上!