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 执行吗?
您需要检查的主要事项:
- 如果 crond 已启动且 运行(顶部,ps -A)
- 如果 crond 有足够的权限执行 wget ( ls -l /usr/bin )
- 如果 wget 没有产生任何错误(不要丢弃 /dev/null 的输出,将其存储在某个文件中,然后首先检查 - 是否创建了文件,如果没有 - 三重检查事情 1 和2,如果文件已创建并且有一些信息 - 这可能会有所帮助)
- 与项目 1 和 2 相关。检查用户 运行 crond 并尝试使用该用户执行命令。
- 尝试不执行 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 是否收集数据。
我家里有一个 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 执行吗?
您需要检查的主要事项:
- 如果 crond 已启动且 运行(顶部,ps -A)
- 如果 crond 有足够的权限执行 wget ( ls -l /usr/bin )
- 如果 wget 没有产生任何错误(不要丢弃 /dev/null 的输出,将其存储在某个文件中,然后首先检查 - 是否创建了文件,如果没有 - 三重检查事情 1 和2,如果文件已创建并且有一些信息 - 这可能会有所帮助)
- 与项目 1 和 2 相关。检查用户 运行 crond 并尝试使用该用户执行命令。
- 尝试不执行 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 是否收集数据。