我每小时运行一个 crontab。运行它的用户在 .bash_profile
中有环境变量,当用户从终端运行作业时,这些环境变量会起作用,但是,显然这些不会在运行时被 crontab 拾取。
我已经尝试将它们设置为 .profile
和 .bashrc
但它们似乎仍然没有被接收。有谁知道我可以在哪里放置 crontab 可以获取的环境变量?
原文由 James 发布,翻译遵循 CC BY-SA 4.0 许可协议
我每小时运行一个 crontab。运行它的用户在 .bash_profile
中有环境变量,当用户从终端运行作业时,这些环境变量会起作用,但是,显然这些不会在运行时被 crontab 拾取。
我已经尝试将它们设置为 .profile
和 .bashrc
但它们似乎仍然没有被接收。有谁知道我可以在哪里放置 crontab 可以获取的环境变量?
原文由 James 发布,翻译遵循 CC BY-SA 4.0 许可协议
从命令行运行 crontab -e
时,您可以在 crontab 本身中定义环境变量。
LANG=nb_NO.UTF-8
LC_ALL=nb_NO.UTF-8
# m h dom mon dow command
* * * * * sleep 5s && echo "yo"
此功能仅适用于 cron 的某些实现。 Ubuntu 和 Debian 当前使用 vixie-cron ,它允许在 crontab 文件(也是 GNU mcron )中声明这些。
Archlinux 和 RedHat 使用 cronie , 它不允许 声明环境变量,并且会在 cron.log 中抛出语法错误。解决方法可以按条目完成:
# m h dom mon dow command
* * * * * export LC_ALL=nb_NO.UTF-8; sleep 5s && echo "yo"
原文由 carestad 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答798 阅读✓ 已解决
2 回答3.2k 阅读
在运行命令之前让“cron”运行一个设置环境的 shell 脚本。
总是。
~/bin/Cron 中的脚本都是指向单个脚本“runcron”的链接,如下所示:
(使用较旧的编码标准编写 - 现在,我会在开头使用 shebang ‘#!‘。)
’~/.cronfile’ 是我的配置文件中的一个变体,供 cron 使用 - 严格非交互式且没有回声,以免产生噪音。您可以安排执行 .profile 等等。 (REAL_HOME 的东西是我的环境的产物——你可以假装它和 $HOME 一样。)
因此,此代码读取适当的环境,然后从我的主目录执行命令的非 Cron 版本。因此,例如,我的“工作日”命令如下所示:
‘daily’ 命令更简单: