首先运行 cron

首先运行 cron

我需要以 cron 的形式运行以下命令集,它将停止我的 nginx 服务器,更新 letsencrypt 证书,然后重新启动服务器,但在第二个命令结束后。

我有这样的:

sudo service nginx stop

sudo certbot renew

sudo service nginx start

但是我如何将它们作为 cron 运行?

我想我需要创建一个 bash 脚本 — — 但是当我尝试这样做时它无法启动,所以也许我应该在执行它之前或之后指定一些东西?

另外,如何确保仅在第二条命令执行后才运行最后一条命令?

我是 Ubuntu 的新手,因此即使问题看起来有点幼稚,我也非常感谢任何建议。

谢谢你!

答案1

阅读man 5 crontab以了解root的 crontab(这样您就可以将脚本作为 运行root,而不是使用sudo)。然后,在决定失败时要做什么之后certbot renew,输入类似这样的在某个脚本中,用 调用它sudo直到它起作用,然后从 调用rootcrontab

#!/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

相关内容