首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx certbot cronjob不工作

Nginx certbot cronjob不工作
EN

Server Fault用户
提问于 2018-08-03 12:05:52
回答 2查看 2.1K关注 0票数 0

我已经安装了带有nginx模块的certbot。今天我注意到自动安装的cron没有工作。问题的关键是

代码语言:javascript
复制
/etc/cron.d/certbot

内容是

代码语言:javascript
复制
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

我调试了脚本

代码语言:javascript
复制
test -x /usr/bin/certbot
echo $?
0

test -x /usr/bin/certbot -a \! -d /run/systemd/system
echo $?
1

看了看手册上的测试。好了!似乎不是-a标志的有效参数。

我能够使用

代码语言:javascript
复制
0 */12 * * * root test -x /usr/bin/certbot -a -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

我的问题是:什么是!它一直都在那里吗?

我在用

代码语言:javascript
复制
certbot 0.26.1
nginx version: nginx/1.14.0
Ubuntu 16.04.5
EN

回答 2

Server Fault用户

回答已采纳

发布于 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跟踪器中提出一个问题可能是值得的。

票数 2
EN

Server Fault用户

发布于 2018-08-03 13:57:45

那个白痴的工作太荒谬了。它只会失败,这正是因为它安装在systemd系统上。逻辑的目的是在systemd系统上运行时,特别是当目录/run/systemd/system存在时,不执行certbot。

这不是在systemd系统上运行certbot更新的方式。你是注定要使用系统定时器的。

cron的工作在一个旧的Ubuntu系统上是有意义的,它使用的是upstart而不是systemd。所以还不清楚为什么Ubuntu包维护人员会把它放在当前的包中。这不是certbot的标准部分。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/924806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档