运行 关闭终端后在后台处理
Running process in background after closing terminal
即使在关闭终端后,我也在尝试 运行 在后台执行脚本。我已经搜索和搜索并尝试了 nohup
和 disown
,但似乎都没有用。当我关闭终端 window 时,我收到典型的 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
它位于 .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.
屏幕会话启动后,可以选择断开连接。这将使屏幕在后台处于活动状态。即使在用户注销后它仍将保持活动状态(尽管有权限)。
这是一个例子:
- 创建一个名为 'screencheck.sh'
的 shell 脚本
将以下内容放入文件中(我经常使用 textwrangler 和/或 nano)。
#!/bin/bash
count=0
while [ $count -lt ] ; do
echo "Count: $count of . Pausing for five seconds."
sleep 5s
((count++))
done
打开两个终端windows.
- 在其中一个终端 windows 中输入
screen -ls
。您应该会看到一条关于找不到套接字的消息。
- 在第二个终端 window 中,将目录更改为保存脚本的位置。
- 在第二个终端 window 中键入
screen -S ScreenCheck screencheck.sh 500
。 screencheck.sh 必须是可执行的。
在第二个终端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.
...
- 通过键入
ctrl-a d
断开屏幕会话。也就是control + a,同时松开,d键。
- 你应该看到
[detached]
.
- 在第一个终端中,键入
screen -ls
。
您应该看到如下内容:
FCH000: ~: screen -ls
There is a screen on:
1593.ScreenCheck (Detached)
1 Socket in /var/folders/pk/l6b5fhkj6mxfpfh8mtgmstg40000gn/T/.screen.
使用 screen -R ScreenCheck
重新连接到屏幕会话。
您应该看到如下内容:
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
应该显示与以前相同的屏幕会话。
希望对您有所帮助。
即使在关闭终端后,我也在尝试 运行 在后台执行脚本。我已经搜索和搜索并尝试了 nohup
和 disown
,但似乎都没有用。当我关闭终端 window 时,我收到典型的 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
它位于 .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.
屏幕会话启动后,可以选择断开连接。这将使屏幕在后台处于活动状态。即使在用户注销后它仍将保持活动状态(尽管有权限)。
这是一个例子:
- 创建一个名为 'screencheck.sh' 的 shell 脚本
将以下内容放入文件中(我经常使用 textwrangler 和/或 nano)。
#!/bin/bash count=0 while [ $count -lt ] ; do echo "Count: $count of . Pausing for five seconds." sleep 5s ((count++)) done
打开两个终端windows.
- 在其中一个终端 windows 中输入
screen -ls
。您应该会看到一条关于找不到套接字的消息。 - 在第二个终端 window 中,将目录更改为保存脚本的位置。
- 在第二个终端 window 中键入
screen -S ScreenCheck screencheck.sh 500
。 screencheck.sh 必须是可执行的。 在第二个终端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. ...
- 通过键入
ctrl-a d
断开屏幕会话。也就是control + a,同时松开,d键。 - 你应该看到
[detached]
. - 在第一个终端中,键入
screen -ls
。 您应该看到如下内容:
FCH000: ~: screen -ls There is a screen on: 1593.ScreenCheck (Detached) 1 Socket in /var/folders/pk/l6b5fhkj6mxfpfh8mtgmstg40000gn/T/.screen.
使用
screen -R ScreenCheck
重新连接到屏幕会话。您应该看到如下内容:
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
应该显示与以前相同的屏幕会话。
希望对您有所帮助。