Crontab - 从 ~/.bashrc 传递环境变量

Niv*_*ral 2 bash cron

我用 crontab 碰壁了...我试图设置一个 crontab 来运行一个从 ~/.bashrc 收集 4 个变量的 python 脚本

下面是我当前的 crontab。

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SHELL=/bin/bash
BASH_ENV=/home/m.bienias/.bashrc
# m h  dom mon dow   command
30 12,15,18 * * 1,2,3,4,5 source /home/m.bienias/.bashrc; /usr/bin/python3
/home/m.bienias/skrypty/mail_reporter/Kwanty_bez_eng.py >> /home/m.bienias/cron-log/mail_reporter.log 2>&1``` 
Run Code Online (Sandbox Code Playgroud)

我已经尝试source /home/m.bienias/.bashrc;过并且. /home/m.bienias/.bashrc;

知道我还会错过什么吗?请注意,我在尝试运行 crontab 的机器上不是 sudo 用户

Dar*_*ith 7

我建议为您的工作创建一个特定的启动包装脚本。

将脚本命名为类似的名称run-Kwanty_bez_eng.sh并将其存储在其中/home/m.bienias/skrypty/mail_reporter/

该脚本负责设置环境并启动作业,大致内容如下:

#!/usr/bin/env bash

# set environment
source /home/m.bienias/.bashrc

# start job
/usr/bin/python3 /home/m.bienias/skrypty/mail_reporter/Kwanty_bez_eng.py
Run Code Online (Sandbox Code Playgroud)

...这最终使您可以更好地控制环境甚至错误处理。

我进一步建议将对你的工作的依赖脱钩.bashrc。由于作业依赖而可能出现的问题.bashrc是,对 的更改可能.bashrc会导致作业失败或行为不正确,并且.bashrc就其所服务的职责而言,它是一个繁忙的文件。因此,最好构建一个特定于作业的环境文件,其中仅包含执行作业所需的最少变量。