我面临的问题是:我有一个必须以 root 身份运行的程序。我希望它在屏幕上运行,但这里有一个问题:出于管理原因,我希望能够重新连接到它。
我正在编写一个肮脏而快速的重启守护进程,因为该程序不断以非常神秘的方式失败,即以 sudo 身份运行(因为我需要 root 权限才能启动应用程序)。但是我不想简单地以 sudo 身份运行 screen,因为这样screen -ls
不会显示它,只有sudo screen -ls
。如果我运行sudo -u USER screen -dmS SCREEN_NAME sudo APP
,它似乎工作正常,它会用正常的 screen -ls 列出,但是有一个问题。如果我想检查程序,并尝试重新连接到屏幕,尝试(并输入密码)后,屏幕将终止。
我没有遇到密码问题,问题是重新连接的屏幕正在终止。有人有什么建议吗,我如何在这些条件下从 bash 启动屏幕?
答案1
screen
正在终止,因为程序正在终止。如果您想查看其输出,您可以记录它(使用-L
)以随后检查完整输出,或者,要查看最后几行,请使用屏幕启动 shell 并从该 shell 运行失败的应用程序。屏幕不会退出,直到您退出 shell。
如果存在,屏幕-L
将附加到日志文件。您还可以使用选项建议一个不同于默认值screenlog.N
(N 是屏幕编号)的文件名-Logfile
。
更新:可能是由于运行screen
里面sudo session 类似sudo screen
。在这种情况下,screen 是以 root 身份运行(或者如果使用参数调用了 sudo,则为其他用户-u
)并且您还需要以该用户的身份运行后续操作。例如,要重新连接,sudo screen -r
。