我正在工作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