从 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
我有一个 运行 一个 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