crontab 和 /usr/local/bin 中的二进制文件

crontab 和 /usr/local/bin 中的二进制文件

我正在工作Redhat,文件夹中有一些程序,/usr/local/bin我想从中调用它们crontab以供root用户使用。我认为将二进制文件放在该文件夹中就足以像在 shell 中一样直接调用该程序。

本质上我需要每次指定文件夹,因此下面的 crontab 不起作用

 5 9  * * 1,2,3,4,5 my_bin some_args

但我把它改成了

 5 9  * * 1,2,3,4,5 source ~/.bashrc; /usr/local/bin/my_bin some_args

你知道为什么吗?

我之所以进行源代码搜索bashrc是为了添加一些环境库,特别是LD_LIBRARY_PATH因为我的二进制文件无法从中找到一些共享库/usr/local/lib

答案1

cron 作业在非常小的环境中运行,并且由于它们直接在没有 shell 的情况下执行crond(除非您强制创建一个 shell),因此永远不会发生常规的 shell 设置。有两种标准方法可以解决这个问题。首先,您可以在 crontab 中定义环境变量(请注意,这些变量将应用于所有作业 —— 至少是定义后列出的作业):

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
LD_LIBRARY_PATH=/usr/local/lib

5 9  * * 1,2,3,4,5 my_bin some_args

其次,您可以编辑脚本以减少对其环境的依赖(例如让它定义自己需要什么),然后在 crontab 条目中使用完整路径:

5 9  * * 1,2,3,4,5 /usr/local/bin/my_bin some_args

相关内容