wget不是通过cronjob执行,而是直接在控制台中执行

时间:2016-09-20 10:00:54

标签: cron embedded-linux openwrt

我在家里有一个TP Link Archer C7和15.05 Chaos Calmer。

我想让cronjob工作。它看起来像这样:

* * * * * /usr/bin/wget --spider \"https://subdomain.domain.net/update.php\" >/dev/null 2>&1

不幸的是,这不会被执行。我也尝试* * * * wget -O - https://subdomain.domain.net/update.php同样的结果。 如果直接通过控制台输入,则可以正确执行两个版本。

logread的最后一行

Tue Sep 20 11:55:00 2016 cron.info crond[10317]: USER xxx pid 16697 cmd /usr/bin/wget --spider \"https://subdomain.domain.net/update.php\" >/dev/null 2>&1

看起来不对?知道为什么它不是通过cronjob执行的吗?

2 个答案:

答案 0 :(得分:3)

您的cron作业确实在运行,但是wget遇到错误。

另外要获取日志,i.s.o。重定向到/ dev / null,您不能使用/out.txt,因为cron对/没有写入权限,/tmp/wget.txt会很好。

wget命令也一样,输出存储在哪里?你应该使用-p <directory prefix>选项。

其次,您需要处理数据是否已存在于该目录中,这可能是使用-N并且只下载较新的文件并覆盖旧文件。

当所有人都在努力平息wget输出时,请使用-q选项。

第四,你不能每分钟运行一次脚本* * * * *,因为之前的运行可能尚未完成,请参阅格式:

 # ┌───────────── min (0 - 59)
 # │ ┌────────────── hour (0 - 23)
 # │ │ ┌─────────────── day of month (1 - 31)
 # │ │ │ ┌──────────────── month (1 - 12)
 # │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
 # │ │ │ │ │                  Saturday, or use names; 7 is also Sunday)
 # │ │ │ │ │
 # │ │ │ │ │
 # * * * * *  command to execute

为了测试,让我们每晚午夜1点运行它。

备注: 要真正做到正确,您应该使用脚本文件执行并在其中放置wget命令,其中脚本文件可以锁定以防万一您想要经常执行此操作,请参阅here获取建议,因为这超出了此问题/答案的范围。

并且数字5:不需要使用"转义\",即使这样也不需要",所以请删除它。

总之,首先制作一个可以存储数据的目录,例如/wget_data

mkdir /wget_data
chmod 777 /wget_data

然后调整您的cron行,添加-p <directory prefix>-N并调整执行格式:

1 0 * * *  /usr/bin/wget -N -p /wget_data --spider https://subdomain.domain.net/update.php >/tmp/wget.txt 2>&1

并重新启动你的cron,不能就此提出建议,不知道还有什么用。

也明智将首先从命令行测试您的命令:

/usr/bin/wget -N -p /wget_data --spider https://subdomain.domain.net/update.php >/tmp/wget.txt 2>&1

然后cat /tmp/wget.txt查看该命令是否有效,并ls /wget_data查看wget是否收集了数据。

答案 1 :(得分:1)

您需要检查的主要内容:

  1. 如果crond启动并运行(顶部,ps -A)
  2. 如果crond有足够的权限来执行wget(ls -l / usr / bin)
  3. 如果wget没有产生任何错误(不要将输出丢弃到/ dev / null,请将其存储在某个文件中,然后先检查 - 如果文件根本创建,如果没有 - 请检查第1和第2项,如果文件被创建并且有一些信息 - 它可能会有所帮助)
  4. 与第1项和第2项相关。检查运行crond的用户并尝试使用此用户执行命令。
  5. 尝试执行不是wget,但是有些命令会将某些字符串写入某个文件并检查它是否有效。