क्या Apache2 में Let’s Encrypt cert के नवीनीकरण के लिए क्रोन सेट करने का यह सही तरीका है ? मैं Ubuntu 16.04 का उपयोग करता हूं।
@monthly letsencrypt renew && service apache2 reload
क्या Apache2 में Let’s Encrypt cert के नवीनीकरण के लिए क्रोन सेट करने का यह सही तरीका है ? मैं Ubuntu 16.04 का उपयोग करता हूं।
@monthly letsencrypt renew && service apache2 reload
जवाबों:
मासिक अक्सर पर्याप्त नहीं होता है। यह स्क्रिप्ट कम से कम साप्ताहिक, और अधिमानतः दैनिक रूप से चलना चाहिए। याद रखें कि जब तक वे समाप्ति के करीब नहीं होते हैं, तब तक नवीकरण नहीं किया जाता है, और मासिक आपके मौजूदा सिरे को कभी-कभी समाप्त होने से पहले ही नवीनीकृत हो जाएगा।
कार्यक्रम का नाम है certbot
, जिसका नाम बदल दिया गया था letsencrypt
। यदि आप अभी भी उपयोग कर रहे हैं letsencrypt
, तो आपको वर्तमान संस्करण में अपडेट करने की आवश्यकता है।
उन मुद्दों के अलावा, यह मेरी क्रोन नौकरियों के समान है।
43 6 * * * certbot renew --post-hook "systemctl reload nginx"
ध्यान दें कि 18.04 LTS में letencrypt संकुल को (अंत में) नाम बदलकर सर्टिफिकेट दिया गया है। इसमें अब एक सिस्टम टाइमर शामिल है, जिसे आप सर्टिफिकेट रिन्यूअल को शेड्यूल करने में सक्षम कर सकते हैं, के साथ systemctl enable certbot.timer
और systemctl start certbot.timer
। हालांकि, उबंटू ने हुक को निर्दिष्ट करने का एक तरीका प्रदान नहीं किया। जब तक उबंटू इसे ठीक नहीं करता, आपको अपनी इच्छित कमांड लाइन के साथ certbot.service
ओवरराइड करने के लिए एक ओवरराइड सेट करना ExecStart=
होगा।
--renew-hook
बजाय उपयोगकर्ता के लिए बेहतर हो सकता है --post-hook
, केवल तभी पुनरारंभ करें जब प्रमाणपत्र सफलतापूर्वक नवीनीकृत हो जाए।
certbot renew
बस काम करेंगे ™
ExecStartPost=/usr/sbin/service nginx reload
:। मेरे लिए काम किया!
ExecStartPost=
एक अच्छा विचार है। मैंने ऐसा क्यों नहीं सोचा? लेकिन इस बात का ध्यान रखें कि service
कमांड को हटा दिया जाए; यह हमेशा के लिए नहीं होगा। इसी systemctl
कमांड पर स्विच करें ।
मेरे पास टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है, इसलिए मैं यहां जवाब दूंगा। मैंने हाल ही में (अक्टूबर 2017) एक Ubuntu 16.04 सर्वर पर सर्टिफिकेट स्थापित और चलाया और एक नवीकरण क्रोन जॉब स्वचालित रूप से बनाया गया था /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
यह जांचना एक अच्छा विचार होगा, अगर यह फ़ाइल एक क्रॉस्टैब प्रविष्टि बनाने से पहले ही मौजूद है।
certbot renew
अगर /run/systemd/system
मौजूद है - इस वजह से बजाय एक systemd टाइमर certbot चल रहा है - certbot और systemd टाइमर के बारे में यहाँ और अधिक पढ़ ।
43 6 * * *
इसे हर दिन सुबह 6:43 बजे चलाते हैं। दिन में एक बार पर्याप्त होना चाहिए, लेकिन या तो एक ठीक काम करता है।
Certbot प्रलेखन दिन में दो बार स्क्रिप्ट चलाने की सिफारिश की:
ध्यान दें:
यदि आप एक क्रोन या सिस्टमड जॉब सेट कर रहे हैं, तो हम इसे प्रति दिन दो बार चलाने की सलाह देते हैं (यह तब तक कुछ भी नहीं करेगा जब तक आपके प्रमाणपत्र नवीनीकरण या निरस्त होने के कारण नहीं होंगे, लेकिन इसे नियमित रूप से चलाने से आपकी साइट को ऑनलाइन रहने का मौका मिलेगा। केस लेट्स एनक्रिप्टेड-शुरू किए गए निरसन किसी कारण से हुआ)। कृपया अपने नवीनीकरण कार्यों के लिए घंटे के भीतर एक यादृच्छिक मिनट का चयन करें।
जैसा कि माइकल हैम्पटन का उल्लेख है कि नाम बदलकर सर्टिफिकेट कर दिया गया है, लेकिन वे अभी भी -ऑटो विकल्प प्रदान करते हैं जो खुद को अपडेट रखता है। certbot-auto
आदेश, चलाने के लिए रूट विशेषाधिकार की जरूरत है ताकि अपने क्रॉन स्क्रिप्ट में लाइन कुछ इस तरह दिखना चाहिए:
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
पथ का परीक्षण करने के लिए पहले से ही शेल में नवीनीकृत कमांड को फिर से जांचना सुनिश्चित करें, अगर प्रमाणपत्र नवीनीकरण के कारण नहीं है तो कुछ भी नहीं होगा ( --quiet
जो हो रहा है उसे देखने के लिए ध्वज के बिना यह परीक्षण चलाएं )।
सर्टिफिकेट को इस तरह से रिन्यू करने पर सर्वर को फिर से लोड करना कड़ाई से जरूरी नहीं है, क्योंकि अगर सही तरीके से सेट किया गया तो लाइव सर्टिफिकेट का रास्ता नहीं बदलता है।
यह सच है अगर आप अपाचे चला रहे हैं - नगनेक्स के लिए, एक नवीनीकरण हुक जोड़ने पर विचार करें, जैसे:
52 0,12 * * * root certbot renew --renew-hook 'service nginx reload'
--renew-hook
एक सफल नवीनीकरण के बाद केवल पुनरारंभ करने के लिए उपयोग करने के बारे में जानकारी के लिए यह पोस्ट देखें : guyrutenberg.com/2017/01/01/…
आपको कुछ भी सेट नहीं करना चाहिए। हाल ही के किसी भी डेबियन / उबंटू सर्टिफिकेट की स्थापित प्रणाली को एक सिस्टेम टाइमर और क्रोन जॉब स्थापित करना चाहिए (और क्रोन जॉब केवल तभी चलेगी certbot
जब सिस्टेम सक्रिय नहीं है, इसलिए आपको रनिंग दोनों नहीं मिलती है)।
आप कमांड का उपयोग करके अपने सिस्टम टाइमर को देख सकते हैं 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
सर्टिफिकेट टाइमर यहां होना चाहिए /lib/systemd/system/certbot.timer
और यह निर्दिष्ट कमांड को निष्पादित करेगा/lib/systemd/system/certbot.service
certbot.timer
12 घंटे (43200 सेकंड) के यादृच्छिक विलंब के बाद, 12 बजे और 12 बजे `सर्टिफ़िकेट.सर्विस निष्पादित करेगा।
# 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
जैसा कि दूसरों ने उल्लेख किया है, इसमें एक क्रॉन जॉब भी स्थापित है /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
झंडा "शांत" है - किसी भी उत्पादन का उत्पादन नहीं करते जब तक कि वहाँ एक त्रुटि है।मैं मूल रूप से क्रॉन की नौकरी से उलझन में था क्योंकि यह सिस्टमड की वजह से चलने वाला नहीं था, इसलिए सर्बोट कैसे चलाया जाएगा? मुझे इस फोरम पोस्ट में उत्तर मिला जो कि मैंने इस उत्तर पर आधारित है।
/etc/cron.d/certbot
मौजूद है, systemctl list-timers
दिखाता है certbot.timer
, लेकिन मेरे अनाज को नवीनीकृत नहीं किया गया था। चल रहा है certbot
मैन्युअल रूप से ठीक काम किया है, इसलिए मैं नहीं जानता कि क्या हो रहा है। एक पुराने स्कूल में crontab
प्रवेश को समाप्त किया ।
test
यह जांचने के लिए चलता है कि क्या सिस्टम सक्रिय है और यदि यह है, तो क्रॉन जॉब तुरंत बिना रुके निकल जाती है certbot
- क्रॉन जॉब के बारे में टेक्स्ट देखें। मैं पाठ को अधिक सटीक होने के लिए संपादित करूंगा।
LetsEncrypt सर्टिफिकेट रिन्यूअल के लिए, मैं आम तौर पर getsl का उपयोग करता हूं । यह एक बहुत ही आसान खोल आवरण है जो SSH कनेक्शन के माध्यम से अन्य मशीनों पर भी प्रमाण पत्र स्थापित कर सकता है।
क्रोन प्रविष्टि निम्नलिखित है:
01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful
जैसा कि पहले से ही सुझाव दिया गया है, आपको इसे दिन में दो बार रोजाना या उससे भी बेहतर चलाना चाहिए।
जैसा कि पहले से ही glaux द्वारा उल्लिखित है:
ध्यान दें: यदि आप एक क्रोन या सिस्टमड जॉब सेट कर रहे हैं, तो हम इसे प्रति दिन दो बार चलाने की सलाह देते हैं (यह तब तक कुछ भी नहीं करेगा जब तक कि आपके प्रमाण पत्र नवीनीकरण या निरस्त नहीं हो जाते, लेकिन इसे नियमित रूप से चलाने से आपकी साइट को रहने का मौका मिलेगा। ऑनलाइन मामले में आइए किसी कारण से एनक्रिप्टेड-शुरू किए गए निरसन हुआ)। कृपया अपने नवीनीकरण कार्यों के लिए घंटे के भीतर एक यादृच्छिक मिनट का चयन करें।
स्रोत: 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"
-पर-हुक और -पोस्ट-हुक हुक हर नवीनीकरण के प्रयास से पहले और बाद में चलते हैं। यदि आप चाहते हैं कि आपका हुक एक सफल नवीनीकरण के बाद ही चले, तो इस तरह से कमांड में --renew- हुक का उपयोग करें।
--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
अन्य सदस्यों ने पहले से ही बहुत अधिक विस्तृत उत्तर दिए हैं। लेकिन ऐसा लगता है कि मुझे यहां इसका उल्लेख करना चाहिए।
सर्पोट संस्करण के रूप में 0.21.1 --renew-hook
ध्वज को बदल दिया जाता है --deploy-hook
यह सुनिश्चित करने के लिए कि आप हटाए गए ध्वज का उपयोग नहीं कर रहे हैं।
certbot renew --deploy-hook "systemctl restart myservice"
ईएफएफ सर्टिफिकेट गाइड के अनुसार
कई लिनक्स वितरण स्वचालित नवीनीकरण प्रदान करते हैं जब आप उनके सिस्टम पैकेज प्रबंधक के माध्यम से स्थापित संकुल का उपयोग करते हैं।
क्या आप वाकई या नहीं, आपके सिस्टम यह पहले से ही स्वचालित है नहीं हैं, तो अपने सिस्टम की जाँच crontab (आमतौर पर में /etc/crontab/
और /etc/cron.*/*
$ crontab -l
और systemd टाइमर $ systemctl list-timers
।
/etc/cron.d/certbot