Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python模块的terminal和bash脚本之间的奇怪行为差异_Python_Bash_Systemd - Fatal编程技术网

python模块的terminal和bash脚本之间的奇怪行为差异

python模块的terminal和bash脚本之间的奇怪行为差异,python,bash,systemd,Python,Bash,Systemd,我安装了一个python脚本,用于更新我的下一个Tcloudpi的dyndns记录: 当我使用domain connect dyndns update从终端运行程序时,所有的都运行得很好。 现在,我创建了一个systemd服务和一个调用该服务的计时器。该服务正在调用一个非常简单的bash文件: #!/bin/bash /home/pi/.local/bin/domain-connect-dyndns update --all 当我检查服务的执行时,结果是这样的: pi@nextcloudpi

我安装了一个python脚本,用于更新我的下一个Tcloudpi的dyndns记录: 当我使用
domain connect dyndns update从终端运行程序时,所有的
都运行得很好。
现在,我创建了一个systemd服务和一个调用该服务的计时器。该服务正在调用一个非常简单的bash文件:

#!/bin/bash

/home/pi/.local/bin/domain-connect-dyndns update --all
当我检查服务的执行时,结果是这样的:

pi@nextcloudpi:~ $ systemctl status ddns.service
● ddns.service - Update IONOS DNS Record
   Loaded: loaded (/etc/systemd/system/ddns.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2020-10-18 20:20:10 BST; 45s ago
  Process: 18391 ExecStart=/bin/bash /home/pi/own-bashscripts/execddns.sh (code=exited, status=1/FAILURE)
 Main PID: 18391 (code=exited, status=1/FAILURE)

Oct 18 20:20:06 nextcloudpi systemd[1]: Started Update IONOS DNS Record.
Oct 18 20:20:10 nextcloudpi bash[18391]: Couldn't read setttings.
Oct 18 20:20:10 nextcloudpi bash[18391]: Traceback (most recent call last):
Oct 18 20:20:10 nextcloudpi bash[18391]:   File "/home/pi/.local/bin/domain-connect-dyndns", line 10, in <module>
Oct 18 20:20:10 nextcloudpi bash[18391]:     sys.exit(main())
Oct 18 20:20:10 nextcloudpi bash[18391]:   File "/home/pi/.local/lib/python3.7/site-packages/dyndns/command_line.py
Oct 18 20:20:10 nextcloudpi bash[18391]:     domains = config.keys()
Oct 18 20:20:10 nextcloudpi bash[18391]: UnboundLocalError: local variable 'config' referenced before assignment
Oct 18 20:20:10 nextcloudpi systemd[1]: ddns.service: Main process exited, code=exited, status=1/FAILURE
Oct 18 20:20:10 nextcloudpi systemd[1]: ddns.service: Failed with result 'exit-code'.
pi@nextcloudpi:~$systemctl status ddns.service
● ddns.service-更新IONOS DNS记录
已加载:已加载(/etc/systemd/system/ddns.service;已启用;供应商预设:已启用)
活动:自英国夏令时2020-10-18 20:20:10以来失败(结果:退出代码);45年前
进程:18391 ExecStart=/bin/bash/home/pi/own bashscripts/execddns.sh(代码=退出,状态=1/失败)
主PID:18391(代码=退出,状态=1/故障)
10月18日20:20:06 nextcloudpi systemd[1]:已开始更新IONOS DNS记录。
10月18日20:20:10下一个Tcloudpi bash[18391]:无法读取设置。
10月18日20:20:10下一次Loudpi bash[18391]:回溯(最近一次通话):
10月18日20:20:10下一个TCloudpi bash[18391]:文件“/home/pi/.local/bin/domain connect dyndns”,第10行,在
10月18日20:20:10下一个Tcloudpi bash[18391]:sys.exit(main())
10月18日20:20:10 nextcloudpi bash[18391]:文件“/home/pi/.local/lib/python3.7/site-packages/dyndns/command_-line.py
10月18日20:20:10 nextcloudpi bash[18391]:domains=config.keys()
10月18日20:20:10 nextcloudpi bash[18391]:未绑定LocalError:赋值前引用的局部变量“config”
10月18日20:20:10 nextcloudpi系统D[1]:ddns.service:主进程退出,代码=退出,状态=1/失败
10月18日20:20:10 nextcloudpi systemd[1]:ddns.service:失败,结果为“退出代码”。
有人能告诉我我遗漏了什么吗?为什么,python问题只有在我用脚本调用它时才会发生,而当我从终端执行它时,一切都正常?
谢谢

脚本找不到
设置.py
。您需要在服务配置文件中设置
工作目录
配置,或者在脚本参数中提供设置路径:

#别忘了更改路径
域连接动态数据更新--all--config/home/pi/ddnsdir/settings.txt

这取决于您的环境。当您使用终端时,您有一个特殊的环境。要查看您的环境中有什么,您可以运行:

env | less

当systemd启动脚本时,它会使用不同的环境。要检查它,请将您的环境从脚本传输到日志文件。它可能是一个扩展的$PATH或脚本环境中缺少的另一个导出变量。

Yey,成功了,看起来现在一切都正常工作了。非常感谢。