适当的方式运行一个脚本用的cron?
题
时运行的一个脚本用时,任何可执行的内部调必须有完整的路径。我发现了这个试图运行 wondershaper, ,当时许多错误表明,当它试图呼叫tc。所以我的问题是,什么是适当的方式克服这个问题?
可能的解决方案:
- cd的可执行的文件夹和准备符号连接到的任何其它称为可执行的存在(不确定它是否适低携带)
- 使用全路径的脚本中的(它的工作低的可携带性跨越不同的发行版)
- 出口路径变量与所需要的道路在脚本内(不知道,如果它的工作)
好了,在此先感谢任何人帮助。
解决方案
声明变量内计划的工作是更加明确和更易于维护:所有你需要修改载于你计划的工作,你不需要转让多个文件应该移动到另一个系统。
PATH=/usr/bin:/your/fancy/dir
MYAPPROOT=/var/lib/myapp
*/2 * * * * myappinpath
*/3 * * * * $MYAPPROOT/mylocalapp
其他提示
如果你在linux/bsd/mac你可以设定一些环境变量喜欢 PATH
右中 crontab
, 和你们一般好去。
如果你在Solaris,好,我为你祈祷。但是,我有一个答案:我通常源 .profile
运行前,任何东西:
0 0 * * 0 . /home/myuser/.profile && cd /path && ./script
记住你的,我的 .profile
负载 .bash_profile
和 .bashrc
.只要确保任何文件来源有你需要什么。
由于cron不运行登陆,.配置文件和/etc/profile未来源。因此,路径可能不被设置为一个价值。我要么
- 设置和出口路径,以合适的价值
- 使用全路径的脚本
你的伎俩带有链接的假设.是在路径只是不似乎不错
我记:
设置的所有变量在一个外部文件。我用'process_name.env'的文件,位于/etc/process_name或类似。想象一下,你有一份脚本。然后你:
- 创建/etc/备份。env和把环境变量需要做的"份"的任务。
修改的备份脚本和增加这条线后 家当:
./etc/备份。env#有一个点一个空间之前全路径的备份的环境。
海事组织这一方法是更好的比声明变量在计划任务的定义,因为:
- 易于维护。只是编辑的文件。
- 容易交换机构/集中配置:
- 你可以有多种。env使用你的脚本在不同的情况下(例如,考虑你有备份位置上你的.env,可以通过。env位置作为一个参数和运行你的计划任务的工作每天提供。env与几个地方和每周用不同的地点通过提供另一个。env,只是一个例子)。
- 你可以保持你的.env文件中的一个风险投资就像SVN或饭桶。
- 很容易测试你的脚本(不需要执行它从CRON).
关于
不隶属于 StackOverflow