システム起動時の画面セッションの設定

システム起動時の画面セッションの設定

私はRaspberry Piを持っていて、そこからいくつかのサービスを実行しています。 SSHを介してマシンに接続してこれらのサービスを監視できる必要があります。私が今やっていることは、ログインして実行してからscreen3つのウィンドウを作成し、各ウィンドウで関連サービスを実行するスクリプトを実行することです。そのうちの2つは実際にはルートとして実行されます。 1つはネットワークを監視し、もう1つはpiに接続されているいくつかのハードウェアを監視します。 3番目は、実際のサービスを実行し、私のユーザーで実行することです。 (2番目は基本的にハードウェアが3番目と通信するためのプロキシです。)

とにかく、これは何らかの理由で(停電など)パイが再起動される場合を除いてうまく機能します。これらすべてをリセットする必要がありますが、退屈です。

システムをscreen自分のユーザーまたは自動起動で実行し、3つのウィンドウ、2つのルートで実行されるプロセス、1つのユーザーで実行されているプロセスを作成し、ログインするとその画面セッションに接続し、すべてのコンテンツをリアルタイムで実行できるようにします。しようとします。

どうすればいいですか?

答え1

@DavidDaiが自分の意見で述べたように、システムサービスとして実行することをお勧めします(システムサービスファイルまたはsysvinit起動スクリプトを生成するなど)。しかし、これは馬のように簡単ではありません。

画面を引き続き使用できます。画面のプロファイルを作成して使用するだけですscreen -c /path/to/screen/config(デフォルト~/.screenrcプロファイルを上書き)。

screen -t monitor1   0 sudo /path/to/monitor1.sh args 
screen -t monitor2   1 sudo /path/to/monitor2.sh args 
screen -t server     2 /path/to/service/script.sh

特定のアクティブウィンドウで起動するには、次の行を追加します。

select 1

man screen詳細より。

また、sudoユーザーがルートmonitor1.shmonitor2.sh

rpi が再起動すると自動的に起動しません。screen手動でログインして起動する必要があります。 uidから自動的に起動するには、crontabエントリで実行できます@rebootman 5 crontab詳細については参考文献を参照)。

この画面セッションにユーザーとして接続できます。


または、ルートとして別の画面(screen -d -m -c /path/to/config上記/etc/rc.localまたはcron上記のように)を実行してから、最初の2つのsudoウィンドウを削除して最後のウィンドウに追加することもできます。

screen -t monitor1   0 /path/to/monitor1.sh args 
screen -t monitor2   1 /path/to/monitor2.sh args 
screen -t server     2 sudo -u username /path/to/service/script.sh

rpi が再起動されるたびに自動的に起動されます。このスクリーンセッションに接続するには、ルートである必要があります。


最後に、監視スクリプトをrootとして実行する必要がない場合は、権限の低いユーザーとして実行する必要があります。新しいユーザーを作成して監視する必要があるすべてのエントリに対する読み取りアクセス権を持つグループに追加することもできます。

答え2

このスクリプトは、再起動時に画面を手動で作成したかのように起動します。

#!/bin/bash -il

# To install:
#   - put this file somewhere in your home directory like ~/start-screens
#   - chmod a+x ~/start-screens
#   - run "crontab -e" and add this line:
#     @reboot /bin/bash -li ~/start-screens

start() { screen -s "/bin/bash" -dmS "$1"; screen -S "$1" -X stuff "$2\n$3\n"; }

# Now define your screens to start here:
start service1 "cd dir1" "node index.js"
start service2 "cd dir2" "node index.js"

これをホームディレクトリに置き、crontab -eに追加する方法の指示に従ってください。

詳しくはhttps://unix.stackexchange.com/a/766301/598166

関連情報