从 Linux .bashrc "raise KeyError(key) from None" 打印时间和变量的简单 cronjob

Simple cronjob to print time and variable from Linux .bashrc "raise KeyError(key) from None"

我有一个 运行 一个 Python 程序 test.py 的 cronjob,并将其输出保存到 test.log

sudo crontab -l 的输出:

* * * * * python3 /path/to/test.py/ >> /path/to/test.log 2>&1

test.py 的内容:

import os
import datetime
NOW = datetime.datetime.now()
print(NOW)
print(os.environ['some_var_in_bashrc']) # export some_var_in_bashrc="99999"

~/.bashrc 的内容:

...

export some_var_in_bashrc="99999"

当从终端 运行ning 时,输出符合预期...

$ python3 test.py
2021-02-01 15:49:02.165106
99999

当 cronjob 运行s 我在 test.log 得到这个:

2021-02-01 15:49:01.341941
Traceback (most recent call last):
  File "/path/to/test.py/", line 8, in <module>
    print(os.environ['some_var_in_bashrc'])
  File "/usr/lib/python3.6/os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'some_var_in_bashrc'

为什么会这样?

我在 Ubuntu 18.04.

问题是默认情况下 cron 无法访问 shell 的 Env var。所以尝试像这样添加你的 cronjob:

* * * * * some_var_in_bashrc="99999" python3 /path/to/test.py/ >> /path/to/test.log 2>&1