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

wget not executed through cronjob but directly in console

我家里有一个 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 执行吗?

您需要检查的主要事项:

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

您的 cron 作业确实 运行,但是 wget 运行 出错了。

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

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

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

第三次使用 -q 选项,当所有工作都在安静 wget 输出时。

第四,你不能每分钟运行脚本* * * * *,因为之前的运行可能还没有完成,见格式:

 # ┌───────────── 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 以获得建议,因为这超出了此 question/answer.

的范围

和数字 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 是否收集数据。