답변:
월간은 충분하지 않습니다. 이 스크립트는 적어도 매주, 바람직하게는 매일 실행해야합니다. 인증서는 만료가 가까워지지 않으면 갱신되지 않으며, 월 단위로 갱신되기 전에 기존 인증서가 이미 만료되는 경우가 있습니다.
프로그램 이름은에서 이름 certbot
이 변경되었습니다 letsencrypt
. 그래도 계속 사용 letsencrypt
중인 경우 현재 버전으로 업데이트해야합니다.
이러한 문제를 제외하고는 내 cron 작업과 거의 같습니다.
43 6 * * * certbot renew --post-hook "systemctl reload nginx"
18.04 LTS에서 letencrypt 패키지의 이름이 (최종) certbot으로 변경되었습니다. 이제 systemctl enable certbot.timer
및로 certbot 갱신을 예약 할 수있는 시스템 타이머가 포함되어 있습니다 systemctl start certbot.timer
. 그러나 우분투는 후크를 지정하는 방법을 제공하지 않았습니다. 우분투가 이것을 고칠 때까지 원하는 명령 줄로 재정의하기 certbot.service
위해 재정의 를 설정해야합니다 ExecStart=
.
--renew-hook
대신 사용자에게 더 좋습니다 --post-hook
.
certbot renew
그냥 작동 ™
ExecStartPost=/usr/sbin/service nginx reload
. 나를 위해 일했다!
ExecStartPost=
하는 것이 좋습니다. 왜 그렇게 생각하지 않았습니까? 그러나이 service
명령은 더 이상 사용되지 않습니다. 영원히있을 수는 없습니다. 해당 systemctl
명령으로 전환하십시오 .
의견이 충분하지 않으므로 여기에 답변 해 드리겠습니다. 나는 최근 (2017 년 10 월) Ubuntu 16.04 서버에 certbot을 설치하고 실행했으며 갱신 cron 작업이에서 자동으로 생성되었습니다 /etc/cron.d/certbot
.
생성 된 크론 작업은 다음과 같습니다.
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
crontab 항목을 작성하기 전에이 파일이 이미 존재하는지 확인하는 것이 좋습니다.
certbot renew
하면 /run/systemd/system
존재 - -이 대신 systemd 타이머가 certbot를 실행하기 때문이다 certbot 여기 systemd 타이머에 대한 자세한 내용 .
43 6 * * *
은 매일 오전 6:43에 실행되도록합니다. 하루에 한 번이면 충분하지만 어느 쪽이든 잘 작동합니다.
certbot 문서는 하루에 두 번 스크립트를 실행하는 것이 좋습니다 :
노트 :
cron 또는 systemd 작업을 설정하는 경우 하루에 두 번 실행하는 것이 좋습니다 (인증서 갱신 또는 해지 기한까지는 아무 것도하지 않지만 정기적으로 실행하면 사이트에 온라인으로 접속할 수 있습니다) 어떤 이유로 든 Let 's Encrypt-initiated 취소가 발생했습니다). 갱신 작업을 위해 시간 내에 임의의 시간을 선택하십시오.
Michael Hampton이 언급했듯이 이름은 certbot으로 변경되었지만 여전히 자동 업데이트되는 -auto 옵션을 제공합니다. 이 certbot-auto
명령을 실행하려면 루트 권한이 필요하므로 cron 스크립트의 행은 다음과 같아야합니다.
52 0,12 * * * root /full/path/to/certbot-auto renew --quiet
필자의 경우 certbot-auto
스크립트는 git-user의 홈 디렉토리에 있습니다. 그러면 정확한 명령은
52 0,12 * * * root /home/git/certbot-auto renew --quiet
설명서의 예제는 혼동 될 수있는 점으로 표시된 상대 경로에 해당합니다.
./path/to/certbot-auto renew --quiet
인증서가 갱신 기한이 아닌 경우 아무 것도 발생하지 않을 경우 경로를 테스트하기 전에 셸에서 갱신 명령을 testrun해야합니다 ( --quiet
무엇이 발생하는지 보려면 플래그 없이이 테스트를 실행 하십시오).
이 방법으로 인증서를 갱신 할 때 서버를 다시로드 할 필요는 없습니다. 올바르게 설정된 경우 라이브 인증서의 경로가 변경되지 않기 때문입니다.
아파치를 실행하는 경우에 해당합니다. nginx의 경우 다음과 같은 갱신 후크를 추가하십시오.
52 0,12 * * * root certbot renew --renew-hook 'service nginx reload'
--renew-hook
성공적인 갱신 후에 만 다시 시작하는 데 대한 정보는 guyrutenberg.com/2017/01/01/…
아무것도 설정할 필요가 없습니다. certbot의 최근 데비안 / 우분투 설치는 systemd 타이머와 cron 작업을 설치해야합니다 (cron 작업은 certbot
systemd가 활성화되어 있지 않은 경우 에만 실행 되므로 둘 다 실행되지는 않습니다).
명령을 사용하여 systemctl list-timers
(또는 systemctl list-timers --all
비활성 타이머를 표시하려는 경우) 시스템 타이머를 확인할 수 있습니다 . 이 같은:
% sudo systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Fri 2018-08-03 06:17:25 UTC 10h left Thu 2018-08-02 06:27:13 UTC 13h ago apt-daily-upgrade.timer apt-daily-upgrade.service
Fri 2018-08-03 11:43:29 UTC 15h left Thu 2018-08-02 16:54:52 UTC 3h 7min ago certbot.timer certbot.service
Fri 2018-08-03 12:44:58 UTC 16h left Thu 2018-08-02 19:14:58 UTC 47min ago apt-daily.timer apt-daily.service
Fri 2018-08-03 19:43:44 UTC 23h left Thu 2018-08-02 19:43:44 UTC 18min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2018-08-06 00:00:00 UTC 3 days left Mon 2018-07-30 00:00:09 UTC 3 days ago fstrim.timer fstrim.service
certbot 타이머가 여기에 있어야하며에 /lib/systemd/system/certbot.timer
지정된 명령을 실행합니다./lib/systemd/system/certbot.service
certbot.timer
최대 12 시간 (43200 초)의 임의 지연 후 오전 12시와 오후 12시에`certbot.service를 실행합니다.
# cat /lib/systemd/system/certbot.timer
[Unit]
Description=Run certbot twice daily
[Timer]
OnCalendar=*-*-* 00,12:00:00
RandomizedDelaySec=43200
Persistent=true
[Install]
WantedBy=timers.target
및 certbot.service
갱신 명령을 실행합니다.
# cat /lib/systemd/system/certbot.service
[Unit]
Description=Certbot
Documentation=file:///usr/share/doc/python-certbot-doc/html/index.html
Documentation=https://letsencrypt.readthedocs.io/en/latest/
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew
PrivateTmp=true
다른 사람들이 언급했듯이 cron 작업도 다음과 같이 설치됩니다 /etc/cron.d/certbot
.
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc. Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew
이것은하고있다 :
test -x /usr/bin/certbot -a \! -d /run/systemd/system
- /usr/bin/certbot
실행 파일이고 디렉토리 /run/systemd/system
가 아닌지 확인하십시오 . 이 검사가 성공하면 다음 비트 만 계속하십시오.
perl -e 'sleep int(rand(43200))'
-0 초에서 12 시간 사이의 임의의 수면 (43200 = 12 x 60 x 60).certbot -q renew
인증서를 확인하고 필요한 경우 갱신하십시오. -q
플래그는 "조용한"입니다 - 오류가 발생하지 않는 한 출력을 생성하지 않습니다.systemd로 인해 실행되지 않을 때 cron 작업에 혼란 스러웠습니다 .certbot은 어떻게 실행됩니까? 이 포럼 게시물 에서이 답변을 기반으로 한 답변을 찾았 습니다.
/etc/cron.d/certbot
는 존재 하지만 systemctl list-timers
표시 certbot.timer
하지만 내 인증서는 갱신되지 않았습니다. certbot
수동으로 실행하면 정상적으로 작동하므로 무슨 일인지 모르겠습니다. 오래된 학교 crontab
항목을 추가했습니다 .
test
를 실행하여 systemd가 활성화되어 있는지 확인하고 활성화되어 있으면 cron 작업이 실행되지 않고 즉시 종료됩니다 certbot
. cron 작업에 대한 텍스트를 참조하십시오. 보다 정확한 텍스트를 편집하겠습니다.
glaux에서 이미 언급했듯이 :
참고 : cron 또는 시스템 작업을 설정하는 경우 하루에 두 번 실행하는 것이 좋습니다 (인증서 갱신 또는 해지 기한까지는 아무 것도하지 않지만 정기적으로 실행하면 사이트에 머무를 기회가 생길 수 있습니다) Let 's Encrypt 시작 취소가 어떤 이유로 든 발생한 경우 온라인). 갱신 작업을 위해 시간 내에 임의의 시간을 선택하십시오.
출처 : https://certbot.eff.org/all-instructions/#debian-8-jessie-apache
그래서 나는 이것을 사용하여 끝났다 (실행은 하루에 두 번, 01:00과 13:00에 매일) :
6 1,13 * * * certbot renew --post-hook "service apache2 restart"
또는 더 나은 :
6 1,13 * * * certbot renew --renew-hook "service apache2 restart"
나는 테스트하지 않았지만 이것이 작동해야합니다.
6 1,13 * * * certbot renew --post-hook "/etc/init.d/apache2 restart"
6 1,13 * * * certbot renew --renew-hook "/etc/init.d/apache2 restart"
--pre-hook 및 --post-hook 후크는 모든 갱신 시도 전후에 실행됩니다. 갱신이 완료된 후에 만 후크를 실행하려면 이와 같은 명령에서 --renew-hook을 사용하십시오.
--renew-hook
따라 인증서를 실제로 갱신 할 때만 서버를 다시 시작하는을 사용하는 것이 좋습니다 .
--post-hook
와 --renew-hook
일 service apache2 restart
대신 service restart apache2
?
service restart apache2
올바른 명령 / 서비스하지 않습니다.
이것이 내가 사용하는 것입니다 :
/opt/letsencrypt/letsencrypt-auto renew
출력을 다음과 같이 제공합니다.
Upgrading certbot-auto 0.8.1 to 0.9.1...
Replacing certbot-auto...
Creating virtual environment...
...
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/host.simplecoin.cz/fullchain.pem
-------------------------------------------------------------------------------
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/host.simplecoin.cz/fullchain.pem (success)
그리고 아파치가 이미 다시 시작되었다는 말은 다시 할 필요가 없습니다. 다시 실행하면 :
Cert not yet due for renewal
따라서 매일 인증서를 갱신하는 것은 문제가되지 않습니다.
@daily /opt/letsencrypt/cronautorenew.sh
스크립트를 사용하여 별도의 파일로 로깅을 조정하므로 다음은 cronautorenew.sh입니다.
#!/usr/bin/env bash
printf "\nattempt to renew certificates" >>/var/log/letsencrypt_cron.log 2>&1
date >>/var/log/letsencrypt_cron.log 2>&1
/opt/letsencrypt/letsencrypt-auto renew >>/var/log/letsencrypt_cron.log 2>&1
printf "renew finished\n" >>/var/log/letsencrypt_cron.log 2>&1
EFF certbot 가이드 에 따르면
많은 Linux 배포판은 시스템 패키지 관리자를 통해 설치된 패키지를 사용할 때 자동 갱신을 제공합니다.
당신이 당신의 시스템이 이미 자동화 여부를 확실하지 않은 경우, 시스템의 확인 의 crontab을 일반적으로 ( /etc/crontab/
그리고 /etc/cron.*/*
$ crontab -l
및 systemd 타이머 $ systemctl list-timers
.
/etc/cron.d/certbot