再起動時にシェルスクリプトを正しく実行する方法

再起動時にシェルスクリプトを正しく実行する方法

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ます。cpprodmain.xinitrc

おすすめ記事