CentOSで動いているサーバーで使っていたCronの設定ファイルを再利用しようとして、そのままUbuntuで動いているサーバーに転送したのだけれど、全く動いている気配がない。
いったいどういう事ですか……?と最近なったので、メモを残しておく。
事象
CentOSサーバーで/etc/cron.d
配下にhogehoge-1.0.0
みたいな名前のcronの設定ファイルを置いていて、Ubuntuサーバーにも同様に配置した。
Cronの実行時間になっても全く実行されている気配がなく、ログも出ていなかった。
原因
結論としては、ファイル名がいけないようだった。
なんとなくファイル名のドットが怪しい気がして、ファイル名を hogehoge
にリネームしたところ、問題なく実行された。
一旦動いたものの、なんだか腑におちず、Ubuntuでは .(ドット) が使えないのかな?と思って調べていたら、以下のスレッドを発見した。
https://bugs.launchpad.net/ubuntu/+source/cron/+bug/706565
どうもUbuntuのcronはrun-parts
コマンドを利用して動かしているらしく、スレッドによるとrun-parts
コマンドの制約に従う必要があるらしい。
run-parts
コマンドのマニュアルを見てみると、ファイル名の制約が書いてあった。
https://manpages.ubuntu.com/manpages/noble/man8/run-parts.8.html
If neither the --lsbsysinit option nor the --regex option is given then the names must
consist entirely of ASCII upper- and lower-case letters, ASCII digits, ASCII underscores,
and ASCII minus-hyphens.
つまり、この4つの文字しか使えないらしい。
- アルファベット(大文字・小文字)
- 数字
- アンダースコア( _ )
- ハイフン( - )
で、ファイル名にドットを入れていたものは動かないと………………。そうですか………。
さっきまで(CentOSのサーバー上で)は動いてたじゃん😭
ちなみに、かなり丁寧にまとめてくれていた以下の記事を後から読んだ。
先に読みたかった……!でも先に読んでたら苦労してないから忘れてただろうな……。