我有一个Shell脚本,该脚本从github获取更新,然后运行它检索的代码。它位于/home/me/Desktop/refreshCode.sh
-- refreshCode.sh --
#!/bin/bash
cd /home/me/src/ProductionMonitor
sudo /usr/bin git -C /home/me/src/ProductionMonitor pull
sudo cp /home/me/src/ProductionMonitor/* /home/me/Desktop/Production
cd /home/me/Desktop/Production
sudo /usr/bin/python3 prodmain.py >> logfile.data
我知道该外壳程序可以手动启动并按预期运行。它打开了tkinter窗口,我可以与屏幕进行交互。
但是我似乎无法正确启动任何东西。
我尝试为@reboot设置crontab,但未成功。它从不显示用户界面
我这样设置了Systemd服务。
-- prodmon.service --
[Unit]
Description=Service to run production monitor
After=multi-user.target
[Service]
Type=forking
ExecStart=/home/me/Desktop/refreshCode.sh
User=caleb
Group=caleb
WorkingDirectory=/home/me/Desktop/Production/
PIDFile=/var/run/prodmon.pid
[Install]
WantedBy=multi-user.target
引导后检查服务的状态,表明服务正在运行。但是,tkinter用户界面从不显示。
您可能不应该把所有的东西都洗掉。一切都在您自己的目录下。
您的问题的重点是,脚本不知道该窗口的显示位置。尝试添加
echo "DISPLAY=$DISPLAY" >> logfile.data
您可能会看到
DISPLAY=
在`logfile.data中。此外,如果您使用:
/usr/bin/python3 prodmain.py >> logfile.data 2>/tmp/errorfile
您可能会看到/tmp/errorfile
类似以下内容的:
prodmain: Xt error: Can't open display:
prodmain: DISPLAY is not set
因此,这就是它在启动时不显示的原因。
现在如何解决:这在很大程度上取决于您要的内容。您可以从~/.xinitrc
登录图形环境开始启动程序。您可以将工作分为两部分:在启动时执行git
和cp
,以及prodmain
从中执行.xinitrc
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句