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

我用crontab撞墙...我试图设置crontab来运行一个Python脚本,该脚本从〜/ .bashrc收集4个变量

请关闭我当前的crontab。

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``` 

I have tried ```source /home/m.bienias/.bashrc;``` and ```. /home/m.bienias/.bashrc;```

Any idea what more I've could miss. Please note that I'm not sudo user on the machine where I try do run crontab

Arbot 回答:Crontab-从〜/ .bashrc传递环境变量

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

将脚本命名为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

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

我进一步建议解除对.bashrc和您工作的依赖。使作业依赖于.bashrc可能引起的问题是对.bashrc的更改可能导致作业失败或行为不正确,并且.bashrc就其职责而言是繁忙的文件供应。因此最好构建一个特定于作业的环境文件,该文件仅包含执行作业所需的最少变量。

,

您可以在/etc/cron.d下创建cron作业,如下所示:

SHELL=/usr/local/bin
PATH=/usr/local/sbin:/usr/local/bin/ <continues your PATH>
30 12,15,18 * * 1,2,3,4,5 root export VAR1=value1 && export VAR2=value2 && export VAR3=value3 && export VAR4=value4 /usr/bin/python3 /path_to_script/Kwanty_bez_eng.py

这样,我认为当您在外壳配置文件中进行一些配置时,它可以防止通过cron作业从外壳配置文件重新加载环境变量。

启动python脚本的shell脚本是最优雅的方式,尽管可以将所有.bashrc都作为源文件,但是可以导出所需的变量。

如果您更喜欢通过crontab -e创建,就像出现一样,只是没有用户使用命令而已。

本文链接:https://www.f2er.com/3154356.html

大家都在问