如何在 Linux 中啟動時建立多個螢幕會話?

如何在 Linux 中啟動時建立多個螢幕會話?

首先,在啟動時執行命令的最佳方式是什麼,cron?我可以su在 shell 腳本中使用在不同使用者之間切換嗎?

如何screen在啟動時建立多個獨立會話?screen -A -m -d -S test ./script.sh看起來它應該可以工作,但是在 cron 啟動的腳本中使用它不會顯示啟動後運行的任何螢幕會話。

命令執行完成後,螢幕會話似乎已關閉,我可以將其保持開啟狀態以便看到輸出嗎?

謝謝!

答案1

若要在系統啟動時執行命令,請將其安排@reboot在 cron 中。man 5 crontab詳情請參閱。這意味著你的 crontab 行應該看起來像

@reboot screen -m ...

不要用於su此目的,請將指令放入應執行該指令的使用者的 crontab 中。這樣,使用者就可以在無需 root 幹預的情況下管理命令。 (但是,如果您想以系統使用者身分執行命令,而不讓該系統使用者出於安全原因更改命令,那麼類似su -c /path/to/command www-datain 的/etc/rc.local命令會更好。)

Screen 在命令完成時關閉窗口,並在最後一個窗口關閉時終止會話。如果您想在腳本完成後查看其輸出,請在其後執行另一個命令以等待輸入。例如,要讓視窗保持開啟狀態,直到您按下Enter它:

screen sh -c './script.sh; read'

請記住,螢幕僅保留有限數量的歷史記錄行。除非script.sh有時需要交互,否則將其輸出重定向到文件會更好。如果確實需要交互,您可以使用 screen 的log命令將輸出發送到文件(然後,如果 screen 會話在不需要輸入時終止,那就不是問題)。

答案2

你有沒有嘗試過screen -AmdS test bash -i ./script.sh

我想發生的事情是它啟動螢幕,運行腳本,然後當腳本退出時,螢幕終止。該bash -i部分告訴 screen 以互動模式啟動 bash,然後讓 bash 運行腳本。腳本執行完畢後,bash 將繼續在命令提示字元中等待,保持螢幕會話打開,以便您在登入系統後附加。

答案3

建立一個執行您想要的操作的腳本。如果僅針對單一命令在使用者之間切換,則繼續使用su -c.否則,請建立一個單獨的腳本並呼叫該腳本。

然後,要讓命令在啟動時運行,請將運行腳本的命令放入/etc/rc.d/rc.local

相關內容