我已经设置了每分钟执行一次的 crontab 任务。
* * * * * sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php
我在 var/log/syslog 文件中看到了它的日志:
Jan 3 15:14:01 clearthefog CRON[26579]: (root) CMD (/usr/bin/php /home/admin/scrapers/terra_plf/terra_swap_api.php)
Jan 3 15:15:01 clearthefog CRON[26623]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
然而,数据库中没有写入任何内容正如文件terra_swap_api.php
应该做的那样。有什么建议吗?有什么方法可以检查文件是否实际执行?
当我在 CLI 中运行相同的脚本时,它运行完美:php terra_swap_api.php
答案1
您不能简单地在 cron 中使用 sudo,因为它会要求输入 sudo 密码。您必须为该命令设置无密码 sudo。
由于 php 文件位于 /root 目录中(请注意,这是一个安全问题),您可以以 root 身份安装 crontab(sudo crontab -e
)并将该行放入其中(无需 sudo)。
如果您的脚本不需要 root 权限,则可以不使用 sudo 运行,但您必须将文件移动到可读位置,因为 /root 由 root 用户拥有且仅限 root 用户使用。