run-partsでスクリプトが実行されなかった

Posted on

cronで実行して欲しいスクリプトを /etc/periodic/weekly に入れたけど、まったく実行されずに時間だけが過ぎていたので、ちゃんと確認してみた。

crontab -l した結果は、

1
2
3
4
5
6
7
# do daily/weekly/monthly maintenance
# min   hour    day     month   weekday command
*/15    *       *       *       *       run-parts /etc/periodic/15min
0       *       *       *       *       run-parts /etc/periodic/hourly
0       2       *       *       *       run-parts /etc/periodic/daily
0       3       *       *       6       run-parts /etc/periodic/weekly
0       5       1       *       *       run-parts /etc/periodic/monthly

こんな感じで /etc/periodic の中のスクリプトを実行する感じになっている。

そこで、ぶち込んだのが /etc/periodic/weekly/update-cert.sh 。 そう、Let’s Encryptの証明書を更新するためにcertbotをキックするスクリプト。

1
2
3
# ls -l /etc/periodic/weekly
total 4
-rwxr-xr-x    1 root     root            25 Mar  8 03:29 update-cert.sh

これで、メンテフリーを期待して過ごすこと数週間。 やっぱり来ました。Let's Encrypt Expiry Bot さんからのメール。

Hello,

Your certificate (or certificates) for the names listed below will expire in 20 days (on 05 Jun 20 17:19 +0000). Please make sure to renew your certificate before then, or visitors to your website will encounter errors.

うん。更新されてないんやね。 実行権限も付いてるし、なんでか理由が分からんかったけど、man run-parts(8)に書いてあった、これ。

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.

「英大文字、小文字、数字、アンダースコア、ハイフンが使えるよ」って書いてありますね。 で、スクリプトのファイル名は、update-cert.sh

「アップデートサート ドット エスエッチ」…

「ドット エスエッチ」…

「ドット」…

はい。オワタ。

というわけで、update-cert にファイル名を変えて、無事更新されるようになりました。とさ。

ちなみに、この環境で使われていた run-partsbusybox でした。