
screen
スタンドアロンコマンドを使用してサービスを開始したいです。その背景はシリアルインタフェースを読み取って画面に再接続する必要があり、エラーが発生した場合は対話したりシリアルインタフェースを介してコマンドを送信したりできます。
現在私
システムサービスファイル
[Unit]
Description=read serial interface
[Service]
User=someUser
Group=someUser
Type=forking
Restart=on-failure
RestartSec=3
WorkingDirectory=/home/someUser/dev
ExecStart=/usr/bin/screen -DmS serial-magic /home/someUser/dev/run-serial-magic.sh
[Install]
WantedBy=multi-user.target
/home/someUser/dev/run-serial-magic.sh 以下のスクリプト
#!/bin/bash
pio device monitor -b 115200 -p /dev/ttyUSB0 | tee test.log
私はすでに試しました。
- モバイルスクリプト
screen
内部。 - 代わりに
Type=simple
画面オプションを使用してください-d
-D
コマンドラインから手動で呼び出すと、スクリプトは正しく機能します。画面に戻って再び分離できます。しかし、私が奉仕を始めたとき、sudo journalctl -f -u someServoce.service
それは私に
Okt 23 18:13:28 someHost systemd[1]: Starting read serial interface...
しかしscreen -list
、
No Sockets found in /run/screen/S-someUser.
答え1
この場合、画面が実際に実行されていることを確認した場合、サービスファイルの「someUser」が実際にscreen -list
エラーのsomeUserと異なると仮定します。この場合、画面でマルチユーザーサポートを有効にする必要があります。
サービスのように使う予定なので
echo "multiuser on" >> /home/<service user>/.screenrc
echo "acladd <user who needs access to screen>" >> /home/<service user>/.screenrc
これにより、サービスユーザー画面のデフォルトとして追加されます。このユーザーのサービスのみを使用する場合はさらにお勧めします画面用に別々のプロファイルを作成するそしてそれを使って電話してください
/usr/bin/screen -c /path/to/config.conf -DmS serial-magic /home/someUser/dev/run-serial-magic.sh
サービスファイルの「ExecStart =」
その後、次を使用して画面にアクセスできます。screen -x <service user>/serial-magic
テストサーバーRHEL 7でこれを確認しました。