Crontab 任务不起作用,Linux,Debian

Crontab 任务不起作用,Linux,Debian

在 Debian 服务器上,我使用crontab -e以下内容设置了 crontab 任务:

*/2 * * * * /usr/bin/php /root/scrapers/terra_plf/terra_swap_api.php

为什么它不起作用?

当我在 CLI 中运行相同的脚本时,它运行完美:php terra_swap_api.php

笔记

  1. 当我ls -l在 usr/bin 文件夹中执行操作时,我看到以下内容 :
    lrwxrwxrwx 1 root root 21 Dec 15 18:28 php -> /etc/alternatives/php
    php-> /etc/alternatives/php意思是 ?
  2. 当保存GNU 纳米它提示保存到奇怪的文件名像下面这样 /tmp/crontab.AoPJy1/crontab。这样正确吗?
  3. 我可以在哪里查看 crontab 运行/错误的日志?
  4. 该脚本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.4php7.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

相关内容