Arch 中的 Cronie 设置 Linux

Cronie Setup in Arch Linux

这是我在 debian 上工作的 crontab,它 运行 每 5 分钟一次。

*/05 * * * * user /usr/bin/php /var/www/monitoring/cron/status.cron.php

我可以在我的浏览器或 php cli 中执行脚本 status.cron.php,该脚本按预期工作。

现在我被迫 运行 Arch Linux 中的相同脚本,问题是,Arch 使用 systemd/timers 而我不习惯,然后我听说关于 cronie 并决定试一试,这是我目前得到的结果:

cronie 已安装,正在 运行ing,请参阅:

● cronie.service - Periodic Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/cronie.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-12-23 00:40:31 +07; 1 months 1 days ago
 Main PID: 631 (crond)
    Tasks: 1 (limit: 4620)
   Memory: 5.4M
   CGroup: /system.slice/cronie.service
           └─631 /usr/bin/crond -n

Jan 24 00:41:01 user-pc CROND[31933]: (root) CMD (run-parts /etc/cron.minutely #Runs a cron job script every minute)

/etc/cron.d 目录中创建了一个名为 monitoring 的文件 这是文件:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
*/1 * * * * root run-parts /etc/cron.minutely #Runs a cron job script every minute
01 * * * * root run-parts /etc/cron.hourly #Runs a cron job script every hour
02 4 * * * root run-parts /etc/cron.daily #Runs a cron job script every day
22 4 * * 0 root run-parts /etc/cron.weekly #Runs a cron job script every week
42 4 1 * * root run-parts /etc/cron.monthly #Runs a cron job script every month

/etc/中创建了一个名为cron.minutely的新目录,然后在其中创建了一个名为monstatuscron的新文件,文件如下:

#!/usr/bin/php
#*/01 * * * * user /usr/bin/php /var/www/monitoring/cron/status.cron.php
#/usr/bin/php /var/www/monitoring/cron/status.cron.php
/usr/bin/php /var/www/monitoring/cron/status.cron.php

我猜这个文件应该是 Arch 文档中所说的脚本,但是什么类型的脚本? shell 脚本和 运行 我的 php 脚本的指令?或者还有什么? 我评论了 #!/usr/bin/php 正下方的两行,因为它不起作用。我卡在了这一点上。

我还 运行 命令 journalctl -xb -u cronie 检查作业是否 运行ning 我得到了很多这样的条目:

Jan 24 00:58:01 user-pc CROND[32175]: (root) CMD (run-parts /etc/cron.minutely #Runs a cron job script every minute)

似乎 运行ning 符合预期。

感谢对此的任何帮助。

shebang 不应该是 #!/usr/bin/php,而是 #!/usr/bin/env bash#!/bin/bash。这是因为 Bash 是 ArchLinux 的默认 shell - 这是一个 shell 脚本,调用一个 PHP 脚本。还要确保chmod +x cron.minutely/*.sh,这样它才能被执行。没有必要将 PHP-CLI 脚本放入 /var/www,因为它们可以 运行 无处不在(它们最终可以通过 PHP-SAPI 成为 运行 并且暴露敏感信息)。