关闭终端后在后台运行过程

Joh*_*ins 10 macos bash daemon nohup

我试图在关闭终端后在后台运行脚本.我搜索并搜索并试过nohup,disown但似乎都没有工作.当我关闭终端窗口时,我收到了典型的Closing this window will terminate the running processes: watch.消息.这最终会终止我的后台进程,即使在使用nohup或时也是如此disown.可能是什么问题呢?

我的代码简单的两行

cmd="nohup watch -n 1 sudo /etc/block.sh > /dev/null"
$cmd & # blocks automatically  
Run Code Online (Sandbox Code Playgroud)

它位于.bash_profile,因为我希望它在我打开一个新终端时启动.

你可以忽略sudo; 我已经找到了一种在不输入密码的情况下执行sudo命令的方法.

我正在使用Mac OSX.

tri*_*eee 15

启动子shell并nohup从那里运行命令似乎避免让终端在退出时将其终止.

bash -c "nohup sh -c 'while true; do date; sleep 1; done' &"
Run Code Online (Sandbox Code Playgroud)

不是很优雅,但适合我.


小智 7

这已经得到了回答,但屏幕实用程序看起来似乎是完美的.

  • man screen 查看屏幕文档.

  • www.ss64.com/osx/screen.html 查看稍微用户友好的文档.

  • 启动屏幕,显示名称和要运行的脚本:

    screen -S GWatch Scripts/gw_watch.sh
    This starts a screen session named 'GWatch' and executes gw_watch.sh.
    
    Run Code Online (Sandbox Code Playgroud)

启动屏幕会话时,可以选择断开屏幕会话.这将使屏幕在后台保持活动状态.即使在用户注销后它仍将保持活动状态(尽管有权限).

这是一个例子:

  1. 创建一个名为'screencheck.sh'的shell脚本
  2. 将以下内容放入文件中(我经常使用textwrangler和/或nano).

    #!/bin/bash
    
    count=0
    
    while [ $count -lt $1 ] ; do 
       echo "Count: $count of $1. Pausing for five seconds."
       sleep 5s
       ((count++))
    done
    
    Run Code Online (Sandbox Code Playgroud)
  3. 打开两个终端窗口.

  4. 在其中一个终端窗口类型中screen -ls.您应该看到有关未找到套接字的消息.
  5. 在第二个终端窗口中,将目录更改为保存脚本的位置.
  6. 在第二个终端窗口类型中screen -S ScreenCheck screencheck.sh 500.screencheck.sh必须是可执行的.
  7. 在第二个终端窗口中,您应该看到:

    Count: 0 of 500. Pausing for five seconds.
    Count: 1 of 500. Pausing for five seconds.
    Count: 2 of 500. Pausing for five seconds.
    ...
    
    Run Code Online (Sandbox Code Playgroud)
  8. 键入以断开与屏幕会话的连接ctrl-a d.这是控制+ a,释放两个,d键.
  9. 你应该看到[detached].
  10. 在第一个终端中输入screen -ls.
  11. 你应该看到类似的东西:

    FCH000: ~: screen -ls
    There is a screen on:
       1593.ScreenCheck (Detached)
    1 Socket in /var/folders/pk/l6b5fhkj6mxfpfh8mtgmstg40000gn/T/.screen.
    
    Run Code Online (Sandbox Code Playgroud)
  12. 使用重新连接到屏幕会话screen -R ScreenCheck.

  13. 你应该看到类似的东西:

    Count: 226 of 500. Pausing for five seconds.
    Count: 227 of 500. Pausing for five seconds.
    Count: 228 of 500. Pausing for five seconds.
    Count: 229 of 500. Pausing for five seconds.
    ...
    
    Run Code Online (Sandbox Code Playgroud)

要在注销后查看它是否正在运行,请注销并从另一台计算机ssh到计算机.screen -ls应该显示与以前相同的屏幕会话.

我希望这有帮助.