私はRaspberry Piを持っていて、そこからいくつかのサービスを実行しています。 SSHを介してマシンに接続してこれらのサービスを監視できる必要があります。私が今やっていることは、ログインして実行してからscreen
3つのウィンドウを作成し、各ウィンドウで関連サービスを実行するスクリプトを実行することです。そのうちの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.sh
とmonitor2.sh
。
rpi が再起動すると自動的に起動しません。screen
手動でログインして起動する必要があります。 uidから自動的に起動するには、crontabエントリで実行できます@reboot
(man 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に追加する方法の指示に従ってください。