【发布时间】:2018-01-11 17:40:37
【问题描述】:
我正在尝试使用 Python 创建一个安装脚本,以使用 systemd 创建一个守护进程。
安装脚本的摘录:
....
# Copy ProcessManager directory into /usr/local/bin/
print('Copy sources into /usr/local/bin')
os.system('cp -r ' + processManagerPath + ' /usr/local/bin')
fileContent = '[Unit] \n' \
'Description=ProcessManager \n' \
'After=tlp-init.service \n\n' \
'[Service] \n' \
'Type=oneshot \n' \
'RemainAfterExit=no \n' \
'ExecStart=/usr/bin/python /usr/local/bin/ProcessManager/gobatch.py \n\n' \
'[Install] \n' \
'WantedBy=multi-user.target'
file = open('/etc/systemd/system/processManager.service', 'w')
file.write(fileContent)
file.close()
....
但是,当我使用以下命令启动我的守护程序时:sudo systemctl status processManager.service 我收到此错误:
stringToSend = convertFileToString()
File "/usr/local/bin/ProcessManager/gobatch.py", line 23, in convertFileToString
fbatchContent = readFile()
File "/usr/local/bin/ProcessManager/gobatch.py", line 13, in readFile
with open("FBatch", "r") as f:
IOError: [Errno 2] No such file or directory: 'FBatch'
当我列出 /usr/local/bin/ProcessManager 时,内容是:
FBatch findCommand.py gobatch.py install.py Programs.md UpdateFBatchFile.py
关于cp -r 存在一些我不知道的东西?还是关于特权?
感谢您的帮助!
【问题讨论】:
-
你确定工作目录是
/usr/local/bin/ProcessManager吗?with open("FBatch", "r") as f:将尝试在当前工作目录中打开一个文件。 -
是的,我想是因为我的命令 exec 是
ExecStart=/usr/bin/python /usr/local/bin/ProcessManager/gobatch.py。我错了吗? -
我建议将完整路径放在文件名的参数中或使用
print(os.cwd())进行调试 -
我收到一个错误:
AttributeError: 'module' object has no attribute 'cwd'。与os.pwd的结果相同。当我打印 os.system('pwd') 时,除了错误之外什么都没有发生......并且文件直接用 nano 更新。 -
对不起,是
os.getcwd();我的错误