我为自动检测安装编写了一个systemd脚本和python脚本。
系统脚本:
[Unit]
Description=TAD_Client - TAD WebService
After=network.target
[Service]
User=root
Type=forking
ExecStart=/data/.services/autoconfig.sh start
ExecReload=/data/.services/autoconfig.sh restart
ExecStop=/data/.services/autoconfig.sh stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Shell脚本(部分):
export SHELL=/bin/bash
case "$1" in
"start" )
echo "configuration service start"
exec "/usr/bin/python" /data/.services/AutoConfiguration.py run &
;;
"stop" )
echo "configuration service stop"
exec "/usr/bin/python" /data/.services/AutoConfiguration.py stop
;;
"restart" )
echo "restart configuration service"
exec "/usr/bin/python" /data/.services/AutoConfiguration.py stop
exec "/usr/bin/python" /data/.services/AutoConfiguration.py run &
;;
Python脚本(部分):
def mount_peu_server(self):
mount_command = 'mount -t nfs ' + server_ip.addr + ':/mnt /mnt'
p = subprocess.Popen(mount_command, stdout=subprocess.PIPE)
out, err = p.communicate()
self.log_error(out)
self.log_error(err)
当我使用systemd将脚本作为服务启动时,mount命令不起作用,但如果我直接执行python脚本文件,则mount命令可以成功执行。
我检查了输出和错误输出,子进程没有返回任何内容。我认为这可能是一个特权问题,但是这个服务是由root用户运行的,不再需要任何特权。