啟動時自動登入使用者到 TTY,然後在 GNU 畫面中自動執行命令

啟動時自動登入使用者到 TTY,然後在 GNU 畫面中自動執行命令

Ubuntu 14.04.5 LTS

所需功能: 遠端 Ubuntu 伺服器啟動並以指定使用者身分自動啟動正在進行的進程。然後,我可以稍後遠端登入並查看正在進行的過程的過去和當前的螢幕輸出。

目前計劃:

自動化步驟:

  1. 使用者「ubuntu」在啟動時自動登入終端機 (TTY):

    "sudo nano /etc/init/tty1.conf"
    
    Change: exec /sbin/getty -8 38400 tty1
    
    To: exec /sbin/getty --autologin ubuntu -8 38400 tty1
    
  2. 使用者「ubuntu」運行GNU螢幕:

    screen -d -m -S screenname
    
  3. 使用者「ubuntu」在 GNU 畫面中運行正在進行的進程:

    screen -S screenname -p 0 -X stuff "command^M"
    

稍後手動步驟:

  1. 我在另一個終端機 (TTY) 中以使用者“ubuntu”身份遠端登入。
  2. 我重新連接到步驟 2 中啟動的 GNU 螢幕會話:

    screen -r
    
  3. 我能夠查看步驟 3 中啟動的流程的過去和目前輸出。

問題:

  • 這是實現預期結果最有效的方法嗎?
  • 如何自動化步驟 2 和 3 的指令?
  • 步驟 2 和 3 的命令如何不是當我在步驟 4 中手動登入時啟動嗎?

答案1

答案(針對我自己的問題)

  • 這是實現預期結果最有效的方法嗎?
    我仍然不確定下面的解決方案是否最有效,但我可以確認它至少適用於 Ubuntu 上的指定版本。
  • 如何自動化步驟 2 和 3 的指令?
  • 當我在步驟 4 中手動登入時,如何無法啟動步驟 2 和 3 中的命令?

    步驟1
    我將以下內容放在上面步驟 1 期間自動登入的使用者的使用者目錄 (/home/ubuntu/.profile) 中的 .profile 檔案底部:

    pgrep processname || /home/ubuntu/processscript.sh
    

    當使用者自動登入時,該命令將自動執行,因為它位於.profile中。命令的第一部分(在“||”之前檢查“processname”是否已經在運行。如果沒有,它將執行命令的第二部分(在“||”之後)即“processscript.sh”..如果“processname 「已經在運行,則不需要

    進行此檢查,因為我想要運行的進程不能同時運行多個實例,此外,它還解決了進程再次運行的問題。我稍後手動登入。

    第二步
    建立一個名為「processscript.sh」的 shell 腳本文件,其中包含以下內容:

    #!/bin/bash
    screen -d -m -S screenname &&
    screen -S screenname -p 0 -X stuff "/home/ubuntu/command.sh^M"
    

    確保“processscript.sh”位於 /home/ubuntu 目錄中,並且可以使用以下命令執行:

    chmod 744 processscript.sh
    

    上面的shell 腳本創建了一個名為“screenname”的螢幕實例,如果成功完成,它會使用帶有回車符的命令“command.sh”填充該螢幕實例的命令列(這就是“^M”處的內容)最後確實如此)。

    第三步
    在上一步中,我在將帶有屬性的命令填入螢幕命令列時遇到了一些問題(我認為需要進行一些字元轉義)。為了簡單地解決這個問題,我將帶有屬性的完整命令添加到 shell 腳本中並使用它。因此,建立另一個名為「command.sh」的 shell 腳本(如上所述)並在其中新增完整命令。

相關內容