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