プロが教えるわが家の防犯対策術!

centos7でapacheはApache/2.4.6を使っています。

Let’s Encrypt の自動更新をcronに登録したく、ネットで調べてみたのですが、下記の2つのどちらが正しいのかわかりません。

0 3 * * * root /usr/bin/certbot renew

0 3 * * * certbot renew && systemctl restart httpd

上の記述だとhttpdは再起動されず、証明書の更新はされないのでしょうか?
それともどちらも正しいのでしょうか。

A 回答 (2件)

ご質問に提示された2つの例は、cron設定値の格納場所が異なるのだと思います。

webで多くの方がcronの設定方法を説明されていますが、結構この2つの方法の内どちらで説明するか明示しなかったり、混同して説明されていることもあるようです。

a)0 3 * * * root /usr/bin/certbot renew
/etc/crontabファイルに設定値を格納する方法です。全てのアカウントが同じファイルを共有しますのでアカウント名、今の場合"root"の記入が必須です。

b)0 3 * * * certbot renew && systemctl restart httpd
こちらは/var/spool/cron/crontabs/rootファイルに設定値を格納する方法だと思います(昔ながらの方法です。)。ここでは"rootファイル"に設定値を格納することで、当然root権限で処理が実行されるため、設定内容に"root"は不要です。

c)cronでは何処まで$path変数が設定されているのか明確ではないため(探せば何処かに出てるんでしょうが...)、コマンド指定は常にフルパスで指定するべきだと思います。それ故、私なら"/usr/bin/certbot"であり、"/usr/bin/systemctl"と指定します。

d)"&&"の意味が私には判りかねますが、ここで重要なのはcronに於いて、あるコマンドを実行する際「そのコマンドはどのシェル環境(bsh/csh/zsh...)で実行されるのか。」ということだと思います。つまり、実際のシェル環境に"&&"がサポートされているかどうか判らないかも、と思います。
私自身もその点ちゃんと把握してません。
そこでこの例のように順次複数のコマンドを実行したい場合...

#!/bin/csh -f
# FileName: TestScript
/usr/bin/certbot renew
/usr/bin/systemctl restart httpd

のようにシェル環境を"明示した"スクリプトを作成しcrontabsには...

0 3 * * * /home/[AccountName]/hogehoge/TestScript

などと設定します。

尚蛇足ですが、現在のLinuxでは恐らく"/etc/crontabファイル"に設定値を格納する方法が新しく、お奨めなのだと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました!

お礼日時:2024/02/01 23:25

基本的には下ですね。

WebServerの仕様によりますが。

Apache使ってるなら、再起動せずともapachectl graceful でも大丈夫です。
    • good
    • 0
この回答へのお礼

ありがとうございました!

お礼日時:2024/02/01 23:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A