【问题标题】:Cronjob Not Running On Root UserCronjob 未在 root 用户上运行
【发布时间】:2017-11-13 17:55:07
【问题描述】:

我在我的 VPS 上为我的 root 用户设置了以下 cronjob。如果我以 root 用户身份运行该命令本身就可以了。

30 2 * * * service nginx stop && /opt/letsencrypt/letsencrypt-auto renew && service nginx start > /dev/null

但是它不起作用,因为我可以看到我的 SSL 证书没有更新。

如果我运行cat /var/log/cron,我可以看到以下内容

Nov 13 02:30:01 server CROND[2307]: (root) CMD (service nginx stop && /opt/letsencrypt/letsencrypt-auto renew && service nginx start > /dev/null)

这似乎表明它运行了,但显然它没有完成它应该做的事情。

我的普通用户上的其他 cronjobs 似乎工作正常,但是我不能将该用户用于 crons,因为我需要为这个 cron 暂时停止 Nginx。

关于如何进一步调试和解决这个问题有什么想法吗?

* 编辑:*

我尝试运行它来记录,日志中显示了以下错误/bin/sh: service: command not found

【问题讨论】:

  • 直接输出到日志文件而不是 /dev/null。你得到了什么?
  • @TurtlesAllTheWayDown 查看我的编辑。
  • 您可能需要将命令列表括在括号中,以将它们的组合输出重定向到日志文件。
  • @RichardSmith 成功了,我在日志中收到以下错误:/bin/sh: service: command not found 我该如何解决这个问题?

标签: nginx cron lets-encrypt


【解决方案1】:

问题是 service 命令不在 crons PATH 中,所以我必须使用完整路径 /sbin/service

这意味着我最后的 cron 命令是

30 2 * * * (/sbin/service nginx stop && /opt/letsencrypt/letsencrypt-auto renew && /sbin/service nginx start) > /dev/null 2>&1

现在正在运行。

一般来说,指定任何 shell 命令的完整路径是最佳做法。

【讨论】:

    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2021-07-19
    • 2018-05-19
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多