使用帐户alex
,我创建了:
~/pocketmine/pocketmine.sh
当我使用同一帐户手动运行此命令时alex
:
cd pocketmine
./pocketmine.sh start
它运行良好。
我已将此添加到/etc/crontab
:
16 15 * * * alex /home/alex/pocketmine/pocketmine.sh start
而且15点16分不工作。
有人可以告诉我我做错了什么吗?
答案1
一般来说,/etc/crontab
使用命令比直接编辑更容易crontab
。更改非 root 用户的 crontab 的语法因平台而异。例如,在 Red Hat Enterprise Linux 上,它将是:
# crontab -e -u alex
在 AIX、HP-UX 和 Solaris 上:
# crontab -e alex
您可能还需要添加该用户cron.allow
才能运行作业。
有关作业未运行的原因的详细信息可以在 cron 日志中找到,该日志的位置也各不相同。
编辑:要直接回答您的问题,您的直接编辑可能不起作用,因为您没有重新启动 cron 守护程序。crontab
这是它为您提供的众多有价值的服务中的另一项。
答案2
如果您的脚本在从 shell 中的命令行运行时可以正常运行,但无法从 执行,则您运行的cron
环境可能存在问题。请尝试附加:cron
2> /tmp/error.txt
到你不会执行的语句的末尾,cron
看看执行过程中发生了什么错误。运行命令cron
并读取文件的内容/tmp/error.txt
。
rsync
当我从文件运行时遇到问题时cron
,我在文件中收到以下输出error.txt
:
ld.so.1: rsync: fatal: libiconv.so.2: open failed: No such file or directory.
问题在于环境未设置为找到执行命令所需的库。我LD_LIBRARY_PATH
在脚本的开头添加了一个环境变量语句,以将变量设置为与文件LD_LIBRARY_PATH
中的变量相同的值,.profile
因为当我使用我的配置文件从 shell 运行脚本时,脚本正确执行。
"export LD_LIBRARY_PATH="/usr/lib:/usr/local/lib"
之后,一切顺利。我的rsync
程序用完了,/usr/local/lib
所以我猜测对该区域的引用解决了我的问题。如果在引用脚本中的其他文件时不使用完整路径,则还可能会遇到其他路径问题。