以 phpsessionclean 时间表为例。其 cron.d 文件如下所示:
09,39 * * * * root [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean; fi
它说如果系统上不存在 systemd 则运行脚本/usr/lib/php/sessionclean
。
如果 systemd 确实存在,则它不会运行,而是运行 systemd 计时器。该phpsessionclean.timer
文件如下所示:
[Unit]
Description=Clean PHP session files every 30 mins
[Timer]
OnCalendar=*-*-* *:09,39:00
Persistent=true
[Install]
WantedBy=timers.target
我读到了有关创建您自己的 .timer 文件并创建关联的 .service 文件,其中包含您正在运行的脚本的详细信息,但在这种情况下,以及由软件包安装的其他 .timer 文件(例如 certbot、apt等)没有关联的 .service 文件。那么,我如何推断当这个计时器运行时将执行什么命令呢?
答案1
您可能找错地方了。单位可以位于多个地方。
$ systemctl cat systemd-tmpfiles-clean.service
# /lib/systemd/system/systemd-tmpfiles-clean.service
...
(您还可以在这里看到一个命令:
$ systemctl status systemd-tmpfiles-clean.service
● systemd-tmpfiles-clean.service - Cleanup of Temporary Directories
Loaded: loaded (/lib/systemd/system/systemd-tmpfiles-clean.service; static)
Active: inactive (dead) since Sun 2017-07-16 17:34:00 BST; 16h ago
Docs: man:tmpfiles.d(5)
man:systemd-tmpfiles(8)
Process: 28580 ExecStart=/bin/systemd-tmpfiles --clean (code=exited, status=0/SUCCESS)
Main PID: 28580 (code=exited, status=0/SUCCESS)
要仔细检查关联的服务:
$ systemctl show -p Unit systemd-tmpfiles-clean.timer
Unit=systemd-tmpfiles-clean.service