質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

3466閲覧

Let's Encryptの自動更新ができない

kurori

総合スコア111

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2017/01/10 01:19

編集2017/01/10 05:06

###前提・実現したいこと
2016/10以前に導入したLet's Encryptで証明書の自動更新が出来なくて困っています。
実際には、Let's Encryptではなく、Linuxのコマンドの設定だと思うので、
Linuxに詳しい方に一読いただけると幸いです。

###環境情報
Cent OS 6 (64bit)
Let's Encrypt(2016/10以前の導入)

Let's Encrypt(2016/10以前の導入の物)は、
python27が必須要件の為、SCLを導入し、使用しています。

また、以下のようなシェルを作成して実行しています。

#!/bin/sh scl enable python27 - << \EOF ./certbot-auto renew --pre-hook "service httpd stop" --post-hook "service httpd start" EOF

###発生している問題・エラーメッセージ
上記のシェルですが、teraterm等からsh、bashコマンドで実行すると動作してれるのですが、
cronに設定を行うと空振りしているのか、実行されません。
(ログ出力を行ってみても何も出力されませんでした)

###質問
そもそも、cronからsclコマンド自体が実行できていないように感じています。
上記のようなsclコマンドをcronから実行するには、どのような書き方をすればよいでしょうか?

宜しくお願い致します。

###追記
どうやらcronから実行するとLet's Encryptの「pre-hook」コマンドのパスが問題になっているようです。
Let's Encryptの公式サイトにパスの情報が見つけられていません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kunai

2017/01/10 01:52

そもそもCronが動いていない可能性もあるので、crontabの設定もご提示いただけませんか
kurori

2017/01/10 05:07

ご意見ありがとうございます。cronが動いていることは確認済みでございます。
guest

回答2

0

ベストアンサー

cron上でsclへのパスが通っていない可能性があります。
対話シェルからとは異なりcronから実行した場合は環境変数などが異なります。
絶対パスで呼び出すか、以下のように環境設定を指定する必要があります。
cronジョブを作るのにいつものやり方でいいんですか?

投稿2017/01/10 02:46

can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurori

2017/01/10 04:57

こちらの方法を試させて頂きましたが、結論から言いますと、 うまくいってはいませんが、情報が得られました。 まず、sclコマンドは/usr/bin/scl」であり、envコマンドでcronのパスを確認したところ、 「PATH=/usr/bin:/bin」となっており、パスが通っていることは確認できました。 そこで、ご提示頂いたサイトの「直接再現する」という項目を試してみたところ、 以下のようなメッセージが表示されました。 --- Unable to find pre-hook command service in the PATH. (PATH is /opt/rh/python27/root/usr/bin:/usr/bin:/bin) --- ここに表示されている pre-hookはLet's Encryptのコマンドなのですが、 「find -executable」で発見できないコマンドでした。 ここからはLet's Encryptの問題となりそうです。 有益な情報のご提供、ありがとうございます。
ikedas

2017/01/10 05:03

serviceコマンドへのパス (/sbin) がPATHに含まれていないためではないでしょうか。
kurori

2017/01/10 05:25

ikeda様 ご指摘の通りです。 そういえば無いな、と思って追加したところ、実行されました。 実際の対応としてはcrontab の先頭に PATH="/usr/bin:/bin:/sbin" を記載することで解決しました。 ただ、以下のcronの設定で実行されない事だけが腑に落ちませんでした。 */2 * * * * PATH="/usr/bin:/bin:/sbin" cd /letsencrypt && ./AutoCertbot.sh
ikedas

2017/01/10 05:30

PATH=... の有効範囲が「cd /letsencrypt」だけ (&&の後には及ばない) からでしょう。
kurori

2017/01/10 05:38

おっしゃる通りでした。ありがとうございます。 また、お名前の表記間違い、大変失礼いたしました。
guest

0

こちらの方法でpython27化するのはどうでしょうか?

https://blog.offline-net.com/2016/05/08/apache_24_with_letsencrypt/

$ sudo vi /etc/profile.d/enablepython27.sh #!/bin/bash source /opt/rh/python27/enable export X_SCLS="`scl enable python27 'echo $X_SCLS'`" $ sudo chmod +x /etc/profile.d/enablepython27.sh

であれば

00 05 01 * * /usr/local/letsencrypt/letsencrypt-auto certonly --renew-by-default --webroot -w /var/www/html/ -d www.offline-net.com && /sbin/service httpd reload

なかんじで実行できると思います。

投稿2017/01/10 01:42

kaji

総合スコア648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurori

2017/01/10 04:37

ご意見、ありがとうございます。 こちらの方法ですが、python27で実行してはまずいものが有る事、 Let's Encryptがpython27無しで動くように改造が進んでいることから この方法での対応は見送ろうかと思っております。 せっかくご意見いただいたのに申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問