我已经安装了带有nginx模块的certbot。今天我注意到自动安装的cron没有工作。问题的关键是
/etc/cron.d/certbot内容是
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
echo $?
0
test -x /usr/bin/certbot -a \! -d /run/systemd/system
echo $?
1看了看手册上的测试。好了!似乎不是-a标志的有效参数。
我能够使用
0 */12 * * * root test -x /usr/bin/certbot -a -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew我的问题是:什么是!它一直都在那里吗?
我在用
certbot 0.26.1
nginx version: nginx/1.14.0
Ubuntu 16.04.5发布于 2018-08-03 12:13:06
来自man test:
EXPRESSION1 -a EXPRESSION2 EXPRESSION1和EXPRESSION2都是真的
-a是一个逻辑and
!否定以下表达式,-d /run/systemd/system
因此,这意味着:
如果/usr/bin/certbot存在并且是可执行的,而不是/run/systemd/system,那么它就是一个目录。
\只是一种转义,所以crond不直接解释!。
至于它为什么在那里..。您将不得不询问包维护人员。如果这是可重复的,如果安装在您的系统中产生一个不工作的结果,那么在他们的be跟踪器中提出一个问题可能是值得的。
发布于 2018-08-03 13:57:45
那个白痴的工作太荒谬了。它只会失败,这正是因为它安装在systemd系统上。逻辑的目的是在systemd系统上运行时,特别是当目录/run/systemd/system存在时,不执行certbot。
这不是在systemd系统上运行certbot更新的方式。你是注定要使用系统定时器的。
cron的工作在一个旧的Ubuntu系统上是有意义的,它使用的是upstart而不是systemd。所以还不清楚为什么Ubuntu包维护人员会把它放在当前的包中。这不是certbot的标准部分。
https://serverfault.com/questions/924806
复制相似问题