我查找了几个可能导致我的问题的原因,但都没有成功。问题似乎非常特殊:运行 LTS 10.04 的服务器无法正确运行与互联网使用相关的脚本。我正尝试从我的服务器更新动态 DNS,以便我的域始终指向我的服务器。我通过 ssh 连接到我的服务器进行更改,它始终在运行。
我把 cron 脚本放在了两个地方:
1)使用 crontab -e 为当前用户添加一个 crontab
2)在 /etc/cron.d/ 下添加一个文件(也是两个不同的文件)
我确保它们归 root 所有,并且拥有所有者的访问权限。
排除一些事情:
1)所有 cron 脚本在我的笔记本电脑上运行良好,我的笔记本电脑也是 10.04 LTS
2)从命令行运行时,两个脚本都运行正常。
3)在服务器上,如果我每分钟使用 cron 将“hello”连接到一个文件,它实际上是有效的
要运行的两个脚本中较简单的一个具有如下配置:
* * * * * root /usr/bin/wget "-q --read-timeout=0.0 --waitretry=5 --tries=10 --background http://freedns.afraid.org/dynamic/update.php?...........
我隐藏了更新密钥,并且它后面跟着一个新行。
我觉得这一定是我错过的某些特定于 cron 的东西。
我也没有在 /var 或 /var/log 中有一个 cron 日志文件
如果我忘记提及某些信息,请告诉我。
答案1
- 您是否知道 cron 的错误消息/STDERR 最终会进入系统邮件?如果您尚未设置,您可以快速检查
/var/mail/your_username
。它在 Thunderbird 中被称为 Unix Movemail,但我相信同一机制也有其他名称。 - 使用的默认 shell
sh
不是bash
。 - 您是否知道 cron 作业的环境与您的交互式 shell 完全不同?为了测试这一点,我创建了一个 cron 作业:
* * * * * /tmp/testscript.sh
的内容/tmp/testscript.sh
为:
#!/bin/bash
set
我收到了一封包含以下内容的电子邮件(请注意 PATH 非常不同,请将其与set
命令行进行比较:
BASH=/bin/bash
BASHOPTS=cmdhist:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=([0]="0")
BASH_SOURCE=([0]="/tmp/testscript.sh")
BASH_VERSINFO=([0]="4" [1]="2" [2]="24" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='4.2.24(1)-release'
DIRSTACK=()
EUID=1000
GROUPS=()
HOME=/home/my_username
HOSTNAME=diablo
HOSTTYPE=x86_64
IFS=$' \t\n'
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LOGNAME=jhendrix
MACHTYPE=x86_64-pc-linux-gnu
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/bin:/bin
PPID=623
PS4='+ '
PWD=/home/my_username
SHELL=/bin/sh
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=1
TERM=dumb
UID=1000
_=/bin/bash