我在 SE.com 上阅读了许多有关 cronjobs、crontab 以及如何重新安排 cron 作业的帖子。但似乎在我的 Debian 环境中,会话清理作业计划简单地称为“php”,存在于 /etc/cron.d 中,指定 root 作为用户,当前每 30 分钟运行一次,无法重新安排,除非重新启动。
cat /etc/cron.d/php
返回:
9,39 8-20 * * * root [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean 2>>/dev/null; fi
尽管 /etc/init.d/cron restart ,我所做的任何小时/分钟更改都不会被考虑在内。它位于生产服务器上,因此主机无法轻松重新启动,或者作为实验。
我可以发出一个命令来告诉 crond 考虑任何重新安排吗?
答案1
欢迎来到 Debian;你不再使用 cron。
M. Kitt 是对的,Stack Exchange 更喜欢每个问题一个问题,但在这种情况下,这两个问题都源于您所犯的一个根本错误:您错误地认为您正在运行 cron 作业。
正如您在前面的 cron 作业描述中所看到的,您的 cron 作业正在禁用自己因为他们看到 systemd 在您的系统上运行:
… && 如果 [ ! -d /run/systemd/system ];然后 … ;菲
/etc/cron.d/php
顺便说一下,这并不是非官方的。它的安装方式是Debian php-common 软件包。运行的东西也是从同一个包安装的代替那个 cron 作业:
- 名为 systemd 的计时器单元
phpsessionclean.timer
- 名为的 systemd 服务单元
phpsessionclean.service
如今,人们可以在越来越多的此类 Debian 软件包中发现这种模式:cron 作业被 systemd 单元取代,并且(仅)在 systemd 运行时自行禁用。
因此,调整 cron 表中的调度不会有任何效果(除了更改 shell 命令的执行时间)什么也没做已安排)。同样,在 cron 表中设置环境变量也不会起到任何作用。您需要更改计时器单元中的调度,并更改服务单元中的环境变量。
其详细信息超出了本答案的范围,但您需要简单地了解 systemd 单元、单元覆盖文件以及systemctl cat
、systemctl status
和systemctl edit
命令。
进一步阅读
- 伦纳特·珀特林等人。 “环境”。
systemd.exec
。 systemd 手册页。 Freedesktop.org。 - 伦纳特·珀特林等人。 “选项”。
systemd.timer
。 systemd 手册页。 Freedesktop.org。 - 如何对 .service 进行修改并保持其持久性?
- 在哪里放置用户创建的 systemd 单元文件
- https://unix.stackexchange.com/a/196252/5132