Я должен выполнить следующий набор команд как крон, который остановил бы мой nginx сервер, возобновил бы letsencrypt сертификат и затем запустил бы сервер снова, но после того, как вторая команда закончена.
У меня есть они как это:
sudo service nginx stop
sudo certbot renew
sudo service nginx start
Но как я выполняю их как крон?
Я предполагаю, что должен создать сценарий удара — но когда я пытался сделать это, он не запустится, поэтому возможно, я должен указать что-то прежде или после для него, чтобы быть выполненным?
Также также, как я удостоверяюсь, что последняя команда работает только после того, как второй выполняется?
Я плохо знаком с Ubuntu, таким образом, любой совет ценится, даже если вопрос кажется немного наивным.
Спасибо!
Читать man 5 crontab
узнать о root
crontab (таким образом, можно запустить скрипт как root
, и не используют sudo
). Затем после решения, что Вы хотите сделать когда certbot renew
сбои, помещенные что-то вроде этого в сценарий где-нибудь, вызывают его с sudo
пока это не будет работать, затем вызовите его от root
crontab
.
#!/bin/bash
# **warning! ** Untested code
#
# tell nginx to stop
service nginx stop
# did it stop? exit status 0 => running, 3 => not
status=$(start-stop-daemon --status nginx --pidfile=/run/nginx.pid;echo $?)
while [[ $status -eq 0 ]] ; do
# wait a tenth of a second
sleep 0.1
status=$(start-stop-daemon --status nginx --pidfile=/run/nginx.pid;echo $?)
done
# Note: If nginx never stops, this will wait forever.
#
certbot renew
status=$?
if [[ $status -eq 1 ]] ; then
service nginx start
else
whatever you do when certbot renew fails
fi