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 UIは表示されません。
ベストアンサー1
すべてをsudoしてはいけません。すべてが自分のディレクトリにあります。
質問の要点は、スクリプトがウィンドウを表示する場所がわからないことです。追加してみてください
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
グラフィカル環境にログインしてからプログラムを起動できます。タスクを2つの部分に分けることができます。そして起動時にタスクを実行しgit
ます。cp
prodmain
.xinitrc