我正试着让克朗按正确的路径打电话。当我从shell运行Python脚本时,脚本运行良好,因为它使用了bashrc中设置的路径,但是当我使用cron时,所有的路径都不是从bashrc使用的。有没有一个文件可以输入cron的路径,比如bashrc,或者从bashrc调用路径?
很抱歉,我认为我的措辞不正确,我可以运行正确的脚本(这意味着crontab中脚本的路径不是这里的问题),就在该脚本运行时,我运行了一个构建,它使用了.bashrc
中设置的路径。当我在登录时运行脚本时,会拉入.bashrc
路径。因为cron不在shell中运行,所以它不会拉入.bashrc
。有没有一种方法可以在不必编写bash脚本包装器的情况下引入它?
您应该在
crontab
中放置完整路径。这是最安全的选择。如果不想这样做,可以在程序周围放置一个包装脚本,并在其中设置路径。
例如
变成:
同样,从
cron
调用的任何东西都应该非常小心它运行的程序,并可能为PATH
变量设置自己的选择。编辑:
如果您不知道命令在哪里,您希望从shell执行
which <command>
,它会告诉您路径。编辑2:
因此,一旦程序运行,它应该做的第一件事就是将
PATH
和任何其他必需的变量(例如LD_LIBRARY_PATH
)设置为脚本运行所需的值。基本上,不要考虑如何修改cron环境以使其更适合您的程序/脚本-通过在脚本启动时设置适当的cron环境,使脚本处理给定的环境。
我用了
/etc/crontab
。我使用了vi
,并在需要的路径中输入到这个文件中,并以根用户身份运行它。普通crontab会覆盖您设置的路径。A good tutorial on how to do this。系统范围cron文件如下所示:
很可能,cron是在一个非常稀疏的环境中运行的。检查cron正在使用的环境变量,方法是附加一个虚拟作业,该作业将
env
转储到如下文件:将其与正常shell会话中的
env
输出进行比较。通过在crontab的顶部定义环境变量,可以将自己的环境变量前置到本地crontab。
下面是一个快速修复程序,用于将
$PATH
前置到当前crontab:生成的crontab看起来与chrissygormley的答案类似,路径在crontab规则之前定义。
相关问题 更多 >
编程相关推荐