时运行的一个脚本用时,任何可执行的内部调必须有完整的路径。我发现了这个试图运行 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).

关于

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top