![启动时自动登录用户到 TTY,然后在 GNU 屏幕内自动运行命令](https://linux22.com/image/997075/%E5%90%AF%E5%8A%A8%E6%97%B6%E8%87%AA%E5%8A%A8%E7%99%BB%E5%BD%95%E7%94%A8%E6%88%B7%E5%88%B0%20TTY%EF%BC%8C%E7%84%B6%E5%90%8E%E5%9C%A8%20GNU%20%E5%B1%8F%E5%B9%95%E5%86%85%E8%87%AA%E5%8A%A8%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4.png)
Ubuntu 14.04.5 LTS
所需功能: 远程 Ubuntu 服务器启动后,会自动以指定用户身份启动正在进行的进程。然后,我可以稍后远程登录并查看正在进行的进程的过去和当前屏幕输出。
当前计划:
自动化步骤:
用户“ubuntu”在启动时自动登录到终端(TTY):
"sudo nano /etc/init/tty1.conf" Change: exec /sbin/getty -8 38400 tty1 To: exec /sbin/getty --autologin ubuntu -8 38400 tty1
用户“ubuntu”运行 GNU screen:
screen -d -m -S screenname
用户“ubuntu”在 GNU screen 中运行正在进行的进程:
screen -S screenname -p 0 -X stuff "command^M"
稍后的手动步骤:
- 我以用户“ubuntu”的身份在另一个终端(TTY)上远程登录。
我重新连接到步骤 2 中启动的 GNU screen 会话:
screen -r
- 我能够查看步骤 3 中启动的流程的过去和当前的输出。
问题:
- 这是实现预期结果的最有效方法吗?
- 如何自动执行步骤2和3中的命令?
- 步骤 2 和 3 中的命令如何不是当我在步骤4中手动登录时是否激活?
答案1
答案(针对我自己的问题)
- 这是实现预期结果的最有效方法吗?
我仍然不确定下面的解决方案是否最有效,但我可以确认它至少在 Ubuntu 上所述版本上运行良好。 - 如何自动执行步骤2和3中的命令?
为什么我第 4 步手动登录时第 2 步和第 3 步的命令无法激活?
步骤1
我将以下内容放在上述第 1 步中自动登录的用户的用户目录中的 .profile 文件底部 (/home/ubuntu/.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 脚本(如上所述),并在其中添加完整命令。