我有一个运行python3脚本的crontab条目。这个python脚本使用一个config.ini文件来获取一些令牌,以便在脚本中使用。
crontab条目是:
*/15 * * * * /usr/bin/python3 /opt/scripts/tf_state_backup/tf_state_backup.py >> ~/cron.out 2>&1config.ini文件具有以下内容:
[terraform]
token = <base64 encoded API key>
[gitlab]
token = <base64 encoded API key>python脚本的相关部分如下:
import configparser
## read config file and decode api keys
config = configparser.ConfigParser()
config.read(os.path.abspath('config.ini'))
tfc_token = base64.b64decode(config['terraform']['token']).decode('utf-8')
gitlab_token = base64.b64decode(config['gitlab']['token']).decode('utf-8')当它运行时,我可以检查cron.out文件中的任何错误。每次运行时,我都会得到以下错误。
SyntaxError: invalid syntax
Traceback (most recent call last):
File "/opt/scripts/tf_state_backup/tf_state_backup.py", line 17, in <module>
tfc_token = base64.b64decode(config['terraform']['token']).decode('utf-8')
File "/usr/lib64/python3.6/configparser.py", line 959, in __getitem__
raise KeyError(key)
KeyError: 'terraform'我检查了以下情况:
引用的
在这方面的任何帮助都将是极好的。
发布于 2020-07-30 15:13:24
您应该使用get对象的ConfigParser方法。第一个参数是节名,第二个参数是变量名。如果raw参数设置为True,则特殊字符将被读取为字符串(例如:%)。
我写了一个有用的版本。
test.ini:
[terraform]
token = aGVsbG93b3JsZA==
[gitlab]
token = bm90X2hlbGxvd29ybGQ=test.py:
import configparser
import base64
config = configparser.ConfigParser()
config.read("test.ini")
tfc_token = base64.b64decode(config.get('terraform', 'token', raw=True)).decode('utf-8')
gitlab_token = base64.b64decode(config.get('gitlab', 'token', raw=True)).decode('utf-8')
print(tfc_token)
print(gitlab_token)输出:
>>> python3 test.py
helloworld
not_helloworldFYI:
Python3.6.6和Linux OS进行测试。发布于 2020-07-30 15:14:53
通过将cron作业更新为以下内容,我成功地运行了该任务:
*/15 * * * * cd /opt/scripts/tf_state_backup/ && /usr/bin/python3 /opt/scripts/tf_state_backup/tf_state_backup.py我可能没有正确地获得配置文件的路径?
不管它现在起作用了。
https://stackoverflow.com/questions/63171835
复制相似问题