bash - 无法在 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,这看起来非常奇怪。
解决方案
壳牌sh
不是bash
。sh
不知道该命令,并且在使用它的源命令获取它时source
可能不会没有错误地导入。.bashrc
. /home/user/.bashrc
放线
SHELL=/bin/bash
最重要的crontab
是使用 bash 运行作业。
将用户.bashrc
提供给以 root 用户身份运行的 cronjob 是一个坏主意,您可以考虑在其中创建一个作业/etc/cron.d/
,并指定一个非 root 用户来运行该作业。
5/* * * * * jfeldman /home/jfeldman/cron_runner.sh
.bashrc
cron_runner.sh
可以随着时间的推移而变化,将所有内容复制到甚至更好是有意义的- 创建一个具有自己主目录的新用户,只是为了在单独的主目录中运行 cronjob。
推荐阅读
- mysql - 将mysql插入查询转换为雄辩的
- python - 如何通过多处理将布尔值从一个函数返回到另一个函数?
- ios - 如何修复'操作无法完成。(FairPlayErrorDomain error -42022.)' ,当我调用 [[SKPaymentQueue defaultQueue] addPayment:payment]
- laravel - laravel 项目中的 Composer 版本冲突
- python - 使用字典/表的第一列作为索引/键
- signalr - SignalR Core 集线器与 SignalR .NET 客户端通信?
- javascript - 如何防止用户在电子邮件输入字段中添加空格?
- android - 错误:无法解决:com.android.support:appcompat-v7:23.0.2
- android - 使用 RxJava 执行单元测试时获取 NullPointerException
- proxysql - ProxySQL 设置主机组问题