在 Debian 服务器上,我使用crontab -e
以下内容设置了 crontab 任务:
*/2 * * * * /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php
为什么它不起作用?
当我在 CLI 中运行相同的脚本时,它运行完美:php terra_swap_api.php
笔记
- 当我
ls -l
在 usr/bin 文件夹中执行操作时,我看到以下内容 :
lrwxrwxrwx 1 root root 21 Dec 15 18:28 php -> /etc/alternatives/php
。
php-> /etc/alternatives/php意思是 ? - 当保存GNU 纳米它提示保存到奇怪的文件名像下面这样
/tmp/crontab.AoPJy1/crontab
。这样正确吗? - 我可以在哪里查看 crontab 运行/错误的日志?
- 该脚本
terra_swap_api.php
确实将内容写入数据库。
更新 1
root
删除crontab 表达式后,没有任何变化:
* * * * * /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php
更新 2 - 系统日志
系统日志确实会记录与文件交互的任何痕迹。例如。 Dec 24 16:52:01 clearthefog CRON[7530]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
20 条日志的尾部:
tail -f -n 20 /var/log/syslog
Dec 24 16:49:01 clearthefog CRON[7258]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
Dec 24 16:49:01 clearthefog CRON[7259]: (root) CMD ( [ /etc/bind/named.conf -ot /tmp/dnsmgrupdate.stamp ] || (date; touch /tmp/dnsmgrupdate.stamp; sudo /root/dnsmgr/dnsmgrupdate) >>/var/log/dnsmgrupdate)
Dec 24 16:50:01 clearthefog CRON[7278]: (root) CMD (/usr/local/vesta/php/bin/php -d disable_functions="" /usr/local/vesta/softaculous/do_backups.php >> /dev/null 2>&1)
Dec 24 16:50:01 clearthefog CRON[7279]: (admin) CMD (sudo /usr/local/vesta/bin/v-update-sys-rrd)
Dec 24 16:50:01 clearthefog CRON[7282]: (admin) CMD (sudo /usr/local/vesta/bin/v-update-sys-queue backup)
Dec 24 16:50:01 clearthefog CRON[7284]: (root) CMD ( [ /etc/bind/named.conf -ot /tmp/dnsmgrupdate.stamp ] || (date; touch /tmp/dnsmgrupdate.stamp; sudo /root/dnsmgr/dnsmgrupdate) >>/var/log/dnsmgrupdate)
Dec 24 16:50:01 clearthefog CRON[7283]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
Dec 24 16:51:01 clearthefog CRON[7507]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
Dec 24 16:51:01 clearthefog CRON[7509]: (root) CMD ( [ /etc/bind/named.conf -ot /tmp/dnsmgrupdate.stamp ] || (date; touch /tmp/dnsmgrupdate.stamp; sudo /root/dnsmgr/dnsmgrupdate) >>/var/log/dnsmgrupdate)
Dec 24 16:52:01 clearthefog CRON[7530]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
Dec 24 16:52:01 clearthefog CRON[7532]: (root) CMD ( [ /etc/bind/named.conf -ot /tmp/dnsmgrupdate.stamp ] || (date; touch /tmp/dnsmgrupdate.stamp; sudo /root/dnsmgr/dnsmgrupdate) >>/var/log/dnsmgrupdate)
Dec 24 16:53:01 clearthefog CRON[7547]: (root) CMD ( [ /etc/bind/named.conf -ot /tmp/dnsmgrupdate.stamp ] || (date; touch /tmp/dnsmgrupdate.stamp; sudo /root/dnsmgr/dnsmgrupdate) >>/var/log/dnsmgrupdate)
Dec 24 16:53:01 clearthefog CRON[7548]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
Dec 24 16:54:01 clearthefog CRON[7566]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
Dec 24 16:54:01 clearthefog CRON[7569]: (root) CMD ( [ /etc/bind/named.conf -ot /tmp/dnsmgrupdate.stamp ] || (date; touch /tmp/dnsmgrupdate.stamp; sudo /root/dnsmgr/dnsmgrupdate) >>/var/log/dnsmgrupdate)
Dec 24 16:55:01 clearthefog CRON[7588]: (admin) CMD (sudo /usr/local/vesta/bin/v-update-sys-rrd)
Dec 24 16:55:01 clearthefog CRON[7589]: (root) CMD (/usr/local/vesta/php/bin/php -d disable_functions="" /usr/local/vesta/softaculous/do_backups.php >> /dev/null 2>&1)
Dec 24 16:55:01 clearthefog CRON[7587]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
Dec 24 16:55:01 clearthefog CRON[7593]: (admin) CMD (sudo /usr/local/vesta/bin/v-update-sys-queue backup)
Dec 24 16:55:01 clearthefog CRON[7592]: (root) CMD ( [ /etc/bind/named.conf -ot /tmp/dnsmgrupdate.stamp ] || (date; touch /tmp/dnsmgrupdate.stamp; sudo /root/dnsmgr/dnsmgrupdate) >>/var/log/dnsmgrupdate)
但我不知道可能存在什么问题...
更新 3 - 它似乎被称为
检查var/log/syslog
文件后我确实发现 cron 行每分钟调用一次:
Dec 24 17:09:01 clearthefog CRON[10168]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
Dec 24 17:10:01 clearthefog CRON[10188]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
Dec 24 17:11:01 clearthefog CRON[10417]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
Dec 24 17:12:01 clearthefog CRON[10435]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
Dec 24 17:13:01 clearthefog CRON[10455]: (root) CMD (sudo /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php)
那为什么执行效果不如在 CLI 中,在数据库中抓取和写入某些内容?
答案1
为什么它不起作用?
因为有两种略有不同的 crontab 格式,而您使用了错误的格式——每个用户的 crontab 中没有“用户名”字段。
只有系统crontab 中/etc/crontab
有一个“用户名”字段,但是通过crontab -e
不有一个,因为整个 crontab 文件已经属于特定用户(使用选项选择-u
)。
所以在你的情况下,这个词root
被解释为作为要运行的命令。
当我
ls -l
在 usr/bin 文件夹中执行操作时,我看到以下内容:
lrwxrwxrwx 1 root root 21 Dec 15 18:28 php -> /etc/alternatives/php
。
这是什么php -> /etc/alternatives/php
意思?
它是符号链接如l
字符所示,路径->
是链接的目标。
Debian 允许同时安装多个 PHP 版本(例如php8.0
,,php7.4
)php7.0
,并具有“更新替代”系统来选择哪个版本应为“主要”PHP 版本。它通过一系列符号链接工作,其中“更新替代”指向一个特定版本。
/usr/bin/php7.0
/usr/bin/php --> /etc/alternatives/php --> /usr/bin/php7.4
/usr/bin/php8.0
在 GNU nano 中保存时,系统提示保存为以下奇怪的文件名
/tmp/crontab.AoPJy1/crontab
。这是正确的吗?
是的,这就是该crontab
工具的工作原理——它会为您编辑 crontab 的临时副本。当编辑器退出时,“crontab”工具会将临时文件移回其在 /var/spool 的常规位置。
我可以在哪里查看 crontab 运行/错误的日志?
系统日志通常可通过journalctl -b
或获得journalctl -b -u cron
。
它也可能存在于文件中/var/log/syslog
。