运行 关闭终端后在后台处理

Running process in background after closing terminal

即使在关闭终端后,我也在尝试 运行 在后台执行脚本。我已经搜索和搜索并尝试了 nohupdisown,但似乎都没有用。当我关闭终端 window 时,我收到典型的 Closing this window will terminate the running processes: watch. 消息。这最终终止了我的后台进程,即使在使用 nohupdisown 时也是如此。可能是什么问题?

我的代码就是简单的两行

cmd="nohup watch -n 1 sudo /etc/block.sh > /dev/null"
$cmd & # blocks automatically  

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

可以忽略sudo;我已经找到了一种无需输入密码即可执行 sudo 命令的方法。

我正在使用 Mac OSX.

启动子 shell 和 运行 nohup 命令似乎避免了终端在退出时将其关闭。

bash -c "nohup sh -c 'while true; do date; sleep 1; done' &"

不是很优雅,但适合我。

这已经得到解答,但 Screen 实用程序似乎非常适合此问题。

  • 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.
    

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

这是一个例子:

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

    #!/bin/bash
    
    count=0
    
    while [ $count -lt  ] ; do 
       echo "Count: $count of . Pausing for five seconds."
       sleep 5s
       ((count++))
    done
    
  4. 打开两个终端windows.

  5. 在其中一个终端 windows 中输入 screen -ls。您应该会看到一条关于找不到套接字的消息。
  6. 在第二个终端 window 中,将目录更改为保存脚本的位置。
  7. 在第二个终端 window 中键入 screen -S ScreenCheck screencheck.sh 500。 screencheck.sh 必须是可执行的。
  8. 在第二个终端window,你应该看到:

    Count: 0 of 500. Pausing for five seconds.
    Count: 1 of 500. Pausing for five seconds.
    Count: 2 of 500. Pausing for five seconds.
    ...
    
  9. 通过键入 ctrl-a d 断开屏幕会话。也就是control + a,同时松开,d键。
  10. 你应该看到 [detached].
  11. 在第一个终端中,键入 screen -ls
  12. 您应该看到如下内容:

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

  14. 您应该看到如下内容:

    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.
    ...
    

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

希望对您有所帮助。