首页 > 解决方案 > 无法在 cronjob 中获取 .bashrc

问题描述

我正在尝试在 cronjob 上运行 python 脚本。为了访问该脚本中的环境变量,我将 python 脚本包装在一个简短的 shell 脚本中。但是,cron 似乎没有正确访问我的环境,因为我的 python 脚本中仍然出现关于无法访问环境变量的错误。如果您考虑以下 shell 脚本

#!/bin/bash
source /home/jfeldman/.bashrc
env

从 cronjob 运行此脚本仅产生此输出

SHELL=/bin/sh
PATH=/usr/bin:/bin
PWD=/home/jfeldman
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/jfeldman
LOGNAME=jfeldman
_=/usr/bin/env

而从命令行运行该 shell 脚本会产生更大的环境变量列表,包括我想从我的 python 脚本访问的 API 令牌。此外,我的 PATH 变量比 cronjob 版本短得多env

有谁知道为什么 Cronjobs 无法正确访问我的环境,即使 cronjob 正在运行明确声明的脚本source /home/jfeldman/.bashrc

这是来自 crontab fwiw */5 * * * * /home/jfeldman/crons/test_cron.sh >> /home/jfeldman/crons/test.log 2>&1$` 的行

编辑:经过一些测试,似乎 cron 可以很好地获取我的虚拟环境,而不是 .bashrc,这看起来非常奇怪。

标签: bashcron

解决方案


壳牌sh不是bashsh不知道该命令,并且在使用它的源命令获取它时source可能不会没有错误地导入。.bashrc. /home/user/.bashrc

放线

SHELL=/bin/bash

最重要的crontab是使用 bash 运行作业。

将用户.bashrc提供给以 root 用户身份运行的 cronjob 是一个坏主意,您可以考虑在其中创建一个作业/etc/cron.d/,并指定一个非 root 用户来运行该作业。

5/* * * * * jfeldman /home/jfeldman/cron_runner.sh

.bashrccron_runner.sh可以随着时间的推移而变化,将所有内容复制到甚至更好是有意义的- 创建一个具有自己主目录的新用户,只是为了在单独的主目录中运行 cronjob。


推荐阅读