crontab 中如何设置环境变量

我的 Python3 是装在 /opt/homebrew/bin/ 里面的,我发现在 crontab 中执行 Python 脚本。

使用的是 /usr/bin/python3,这个的版本是 3.9.6。而我用 homebrew 装的是 3.11.2。

如果想让 crontab 优先使用 homebrew 的 Python3,有两种方法。

1、直接写出完整路径

1 7 * * * /opt/homebrew/bin/python3 /path/to/myscript.py

2、在 crontab 头部定义环境变量

PATH=/opt/homebrew/bin:/usr/bin:/bin

当执行脚本时,会按照 PATH 环境变量的先后顺序在每个目录中查找命令,找到第一个版本即执行。

因此这里我把 /opt/homebrew/bin 放最前面。可以写个脚本测试一下 Python 版本。

import sys
print(sys.version)

定义环境变量的好处,就是如果我们有多个脚本需要执行,就可以在 crontab 里面省掉很多字符。例如我现在这种情况,就不用在 crontab 中写一堆 /opt/homebrew/bin/

如果我们要读取用户目录下的脚本,可以使用 $HOME 变量,例如

python3 $HOME/myscript.py

那么我们也可以直接在 crontab 开头,加载 shell 配置文件,例如我使用的是 zsh,可以在 crontab 开头加上

source $HOME/.zshrc

这样的好处是,在 shell 能执行的命令,现在 crontab 应该也可以。而且也能使用 alias。所以看个人需要咯。