systemdサービスを使用して他のアプリケーションを起動するスクリプトを実行する


1

C ++ Qtアプリケーションは、-qwsスイッチを指定することにより、Xなしでグラフィカルに実行されます。そのため、BeagleBone Blackのグラフィカル環境をアンインストールして無効にしました。ボードの電源を入れると、標準のテキストログイン画面が表示されます。

空のパスワードでrootとしてログインすると、タッチスクリーンなどの設定を行うスクリプトを実行して、アプリケーションを起動できます。これは問題なく機能します。

キーボードやマウスが接続されていない産業用キャビネットではバンドル全体が稼働しているため、ブートごとにこのアプリケーションを自動起動する必要があります。それを実現するために、systemdサービスを作成しましたが、残念ながら機能しません。システムを再起動すると、アプリケーションはほんの数秒間表示されますが、ほとんど瞬時に折りたたまれてログイン画面に戻ります。

ログインしてサービスを開始しようとしても、機能しません。これはsystemctl status ivt.service言うことです:

ivt.service - IVT Startup Routines
          Loaded: loaded (/lib/systemd/system/ivt.service; enabled)
          Active: failed (Result: exit-code) since Sat 2000-01-01 00:35:26 UTC; 1min 39s ago
         Process: 499 ExecStart=/usr/bin/ivtstartup.sh (code=exited, status=139)
        Main PID: 403 (code=exited, status=139)
          CGroup: name=systemd:/system/ivt.service

Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Shutdown clients...
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Shutdown servers...
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Shutdown PaPort1 ...
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: PaPort1 shutdown completed.
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: SYSTEM-SHUTDOWN COMPLETE.
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Unload drivers...
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: CSystemManager::UnloadServers PaPort1
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Unload drivers completed.
Jan 01 00:35:26 beaglebone systemd[1]: Failed to start IVT Startup Routines.
Jan 01 00:35:26 beaglebone systemd[1]: Unit ivt.service entered failed state

これは、サービスで実行するスクリプトです(で/usr/bin/ivtstartup.sh):

#!/bin/bash
ifconfig eth0 172.17.6.136 netmask 255.255.248.0 up
route add default gw 172.17.1.200
echo "nameserver 172.17.1.51" > /etc/resolv.conf
ln -s /dev/ttyO2 /dev/ttyM0
/home/root/testbg &
(
export TSLIB_TSDEVICE="/dev/input/touchscreen0";
export TSLIB_CALIBFILE="/etc/pointercal";
export QWS_MOUSE_PROTO="Tslib:/dev/input/touchscreen0";
bash -c '/home/root/testgui -qws';
)

そして最後に、これがサービス/etc/systemd/system/ivt.serviceです:

[Unit]
Description=IVT Startup Routines

[Service]
Type=forking
ExecStart=/usr/bin/ivtstartup.sh

[Install]
WantedBy=multi-user.target

ログインして/usr/bin/ivtstartup.sh手動で実行すると、すべてが機能します。アプリケーションtestbgはバックグラウンドで実行され(シリアル通信などに使用されます)、testgui表示され、期待どおりに動作します。

その構成の問題は何ですか?手動でログインせずにそのスクリプトを自動的に開始する別の方法はありますか?前もって感謝します!


この投稿で答えが見つかるかもしれませんか?起動時にシェルスクリプトを実行する方法
JeromeLEKIEFFRE
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.