我想在独立的屏幕中运行 bash 脚本。该脚本多次调用程序,每次都需要等待很长时间。我的第一个想法是简单地打开一个屏幕,然后调用脚本,但似乎ctrl-a d
在脚本运行时我无法分离(通过)。所以我做了一些研究并发现了这个操作说明将 shebang 替换为以下内容:
#!/usr/bin/screen -d -m -S screenName /bin/bash
但这也不起作用(选项不被识别)。有什么建议么?
PS 我现在想到这screen -dmS name ./script.sh
可能适合我的目的,但我仍然很好奇如何将其合并到脚本中。谢谢。
答案1
这舍邦您所看到的行可能适用于某些 UNIX 变体,但不适用于 Linux。 Linux 的 shebang 行是有限的:你只能有一种选择。整个字符串-d -m -S screenName /bin/bash
作为单个选项传递给screen
,而不是作为不同的单词传递。
如果您想在屏幕内运行脚本而不是处理多个文件或引用,您可以将该脚本设为 shell 脚本,如果尚未在屏幕内运行,则该脚本会调用屏幕。
#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff
答案2
根据屏幕手册页:
screen -d -m
以分离模式启动屏幕。这会创建一个新会话,但不会附加到它。这对于系统启动脚本很有用。-S sessionname
将新会话的名称设置为 sessionname。
所以当我运行你提供的命令时:screen -dmS name ./script.sh
Screen 启动一个名为 name 的窗口并自动运行该 script.sh。要返回那里查看状态,您只需键入:screen -r test
现在使用 Ubuntu 14.04,命令略有不同。尝试:
screen -d -m -S test
现在要运行脚本,您需要转到其配置文件来执行此操作:
sudo vim /etc/screenrc
到达那里后,向下滚动到底部,您将看到:
# Example of automatically running some programs in windows on screen startup.
#
# The following will open top in the first window, an ssh session to monkey
# in the next window, and then open mutt and tail in windows 8 and 9
# respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log
在这一部分,您需要添加要运行的脚本名称,这应该允许您从屏幕上执行所需的所有操作。
答案3
这有点旧了,但这是我能找到的为数不多的线程之一。在尝试了在 ubuntu 14 上以分离模式运行的唯一方法是:
screen -d -m -t nameofwindow sh nameoflaunch.sh
发布将是上面的第二部分,其中包含当前的 java 命令和服务器版本。我经营香草。