JohnYork 2016-05-16
一般当我们建立建立了一个启动server的命令文件后,可以通过./startServer.sh来执行它, 但是当你关闭当前dos窗口的时候相应的server也关闭了。如果想要在退出的时候不关闭server这时就需要用nohup的方式执行server的启动文件。
./start.sh
nohup ./start.sh &
nohup ./start.sh> myout.file 2>&1 &
./需要执行权限
sh不需要,sh是个软链接,它可能是一个任意的shell,通常默认是bash shell
用type命令可以查看
./执行调用的是你开头一行定义的shell,不指定系统会调用默认shell程序
~shell命令中代表用户的家目录。cd 和cd ~都会进入到用户自己的目录。例如:/home/bpmuser
附:nohup命令参考
nohup 命令
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示”and”的符号)到命令的尾部。
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
nohup命令及其输出文件
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。
该命令的一般形式为:nohup command &
使用nohup命令提交作业
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &
在上面的例子中,输出被重定向到myout.file文件中。
实例:
Linux nohup后台运行程序
需求:
存储已满,需要删除过时数据
条件:
数据比较大,删除需要很长时间,直接执行删除命令肯定不行,因为窗口一旦关闭,命令就死掉;那么就让它运行也不行,因为这台电脑可能有其他维护公司也会用此电脑,这也不安全。所以需要后台运行该程序
步骤思路:
1:查看需要删除的数据
2:编辑删除脚本
3:后台执行脚本(有多个脚本,每个窗口最好只执行一个)
4:查看运行的后台进程
5: fg %n将后台脚本调到前台执行
6:验证是否在后台执行
7:终止后台运行的删除脚本
一. 查看需要删除的数据
[root@NAS dj]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 192G 5.6G 177G 4% /
/dev/sda1 190M 12M 169M 7% /boot
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/sdb1 9.0T 7.0T 1.6T 82% /var/www/html/dj
/dev/sdb2 11T 9.9T 113G 99% /var/www/html/djbk
需要删除的数据:
/var/www/html/dj/2012
/var/www/html/djbk/2013
二. 编辑删除脚本
[root@NAS script]# cat rm_2012.sh
#!/bin/bash
rm -rf /var/www/html/dj/2012
[root@NAS script]# cat rm_2013.sh
#!/bin/bash
rm -rf /var/www/html/djbk/2013
注意:编辑完脚本后需要赋予脚本执行权限
chmod +x rm_2013.sh
三. 后台执行脚本(有多个脚本,每个窗口最好只执行一个)
[root@NAS script]# nohup ./rm_2012.sh &
[root@NAS script]# nohup ./rm_2013.sh &
注意:执行脚本的时候,两个脚本不要在同一个窗口执行,
如果在同一个窗口执行,下个执行命令需要等待前面一个执行完成才能执行,
这种效率不是我们要的
四. 查看运行的后台进程
jobs 只能查看当前窗口的后台进程,如果关闭了后台执行脚本的窗口,该命令失效,这个时候就只能用到下面的命令查看
ps -ef 可以查看主机所有运行的进程 ps -ef | grep 过滤条件
五. fg %n将后台脚本调到前台执行
fg %n 将当前后台运行程序调到前台执行
如果执行完后台脚本命令,当前窗口没有关闭,可以执行jobs查看当前窗口运行的后台进程的进程号,再通过fg %n,将此后台进程调到前台执行,如果不想执行该脚本,直接ctl +c 关闭该窗口
六. 验证是否在后台执行
关闭该连接工具后在打开查看,这时候jobs已经不能使用,只能通过以下方式查看后台执行的脚本是否正在执行
[root@NAS script]# ps -ef | grep rm
root 2331 89 0 Nov02 ? 00:00:00 [ib_inform]
root 23792 1 0 09:53 ? 00:00:00 /bin/bash ./rm_2012.sh
root 23793 23792 0 09:53 ? 00:00:23 rm -rf /var/www/html/dj/2012
root 23797 1 0 09:55 ? 00:00:00 /bin/bash ./rm_2013.sh
root 23798 23797 0 09:55 ? 00:00:23 rm -rf /var/www/html/djbk/2013
root 23998 23889 0 10:36 pts/1 00:00:00 grep rm
七. 终止后台运行的删除脚本
删除命令:kill -9 进程号
注意:删除的时候不能删除查找命令,否则会造成关机
参考网络文件链接:
http://jingyan.baidu.com/article/335530daa4707f19cb41c3ef.html
http://www.cnblogs.com/allenblogs/archive/2011/05/19/2051136.html