【问题标题】:Simple cronjob to print time and variable from Linux .bashrc "raise KeyError(key) from None"简单的 cronjob 从 Linux .bashrc “raise KeyError(key) from None”打印时间和变量
【发布时间】:2021-05-06 04:25:08
【问题描述】:

我有一个 cronjob 来运行 Python 程序 test.py,并将其输出保存到 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"

从终端运行时,输出如预期...

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

当 cronjob 运行时,我在 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 上。

【问题讨论】:

标签: python linux cron environment-variables


【解决方案1】:

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

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

【讨论】:

  • 如何设置另一个变量?这行得通吗? * * * * * some_var_in_bashrc="99999";another_variable="111111" python3 /path/to/test.py/ >> /path/to/test.log 2>&1
猜你喜欢
  • 2019-05-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多