Linux

在系統啟動時設置螢幕會話

  • September 5, 2019

我有一個樹莓派,我在上面執行一些服務。我需要能夠通過 ssh 進入機器並監控這些服務。目前,我所做的是登錄、執行screen,然後創建三個視窗,並在每個視窗中執行執行相關服務的腳本。其中兩個實際上以 root 身份執行(一個監視網路,另一個監視連接到 pi 的某些硬體)。第三個是執行實際服務,並在我的使用者中執行。(第二個基本上是硬體與第三個對話的代理。)

無論如何,這很好用,除了當 pi 因任何原因(例如電源故障)重新啟動時,我必須重新設置所有這些,這很乏味。

我希望系統screen在我的使用者中執行或自動啟動,創建三個視窗,兩個執行程序作為 root 和一個在我的使用者中,這樣當我登錄時,我可以連接到該螢幕會話並查看所有內容現場直播。

我該怎麼做?

正如@DavidDai 在他的評論中提到的那樣,最好將它們作為系統服務執行(例如,通過為它們創建 systemd 服務文件或 sysvinit 啟動腳本)。不過,說起來容易做起來難。

可以繼續使用螢幕進行操作。您只需要為螢幕創建一個配置文件,並使用screen -c /path/to/screen/config(覆蓋預設配置文件~/.screenrc)。

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

如果您希望它從一個特定的活動視窗開始,您可以添加如下一行:

select 1

詳情請參閱man screen

您還需要進行配置sudo以允許您的使用者同時script1.shscript2.shroot 身份執行。

當您的 rpi 重新啟動時,這不會自動啟動。您必須登錄並screen手動啟動。要在您的 uid 下自動啟動,您可以從@rebootcrontab 條目執行它(請參閱man 5 crontab詳細資訊)。

您可以作為您的使用者附加到此螢幕會話。


screen -d -m -c /path/to/config或者,您可以以 root 身份(例如從/etc/rc.localcron如上所述)執行分離的螢幕(例如)並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 才能附加到此螢幕會話。


最後,如果您的監控腳本不需要以 root 身份執行,您應該以特權較低的使用者身份執行它們。也許創建一個新使用者並將他們添加到對他們需要監視的任何內容具有讀取訪問權限的組中。

引用自:https://unix.stackexchange.com/questions/539092