使用cron运行脚本时,内部调用的任何可执行文件都必须具有完整路径。我发现这个尝试运行wondershaper,当许多错误显示它试图调用tc时。所以我的问题是,克服这个问题的正确方法是什么?
可能的解决方案:
好的,先谢谢任何人的帮助。
答案 0 :(得分:4)
如果您使用的是linux / bsd / mac,则可以在PATH
中设置一些环境变量,例如crontab
,并且通常情况下您可以使用它。
如果你在Solaris上,那么,我为你祈祷。但是,我也有答案:我通常会在运行任何内容之前找到.profile
:
0 0 * * 0 . /home/myuser/.profile && cd /path && ./script
请注意,我的.profile
加载.bash_profile
和.bashrc
。请确保您提供的文件符合您的要求。
答案 1 :(得分:3)
由于cron没有运行登录,因此不会提供.profile和/ etc / profile。因此,PATH可能无法设置为您期望的值。我要么
使用符号链接的技巧假定。是在PATH中,似乎并不好看
答案 2 :(得分:3)
在cron作业中声明变量更明确,更易于维护:您需要修改的所有内容都包含在您的cron作业中,如果您将其移动到另一个系统,则无需传输多个文件。
PATH=/usr/bin:/your/fancy/dir
MYAPPROOT=/var/lib/myapp
*/2 * * * * myappinpath
*/3 * * * * $MYAPPROOT/mylocalapp
答案 3 :(得分:1)
我的推荐:
将所有变量设置在外部文件中。我使用位于/ etc / process_name中的'process_name.env'文件或类似文件。想象一下,你有一个备份脚本。然后你:
修改备份脚本,并在Shebang之后添加此行:
。 /etc/backup.env#在备份环境的完整路径之前有一个点和一个空格。
IMO这种方法比在CRON定义中声明变量更好,因为:
此致