前言
我们使用Linux搭建服务器之后,经常需要在服务器上运行一些脚本,例如定期检查网络连通性并保存出错日志等。在写好批处理文件(.sh)文件之后,如果是Ubuntu系统,直接登陆上去之后单独启动一个终端并运行.sh文件就可以了。但是如果是没有GUI的Cent OS的话,在我们断开连接、关闭终端之后,终端上所运行的脚本也会随之终止。
因此,需要使用特定的命令,让脚本即使在终端关闭后也能保持在后台运行。下文所介绍的方法,通用于Ubuntu和Cent OS。
正文
启动脚本
使用命令 nohup sh XXX.sh &>/dev/null &
执行成功,会返回该进程的id。此时即使关闭终端,该脚本依旧在后台运行。
详解:
①sh XXX.sh为执行该脚本。
②在命令末尾加上&符号,表示将该命令放到后台运行。但此时该命令的标准输出、错误输出仍在前台。
③>/dev/null 表示将输出重定向到/dev/null中。/dev/null是一个特殊文件,会将传入其中的数据全部丢弃,即删除掉。
- 因为重定向默认参数为1,即>/dev/null相当于1>/dev/null,将标准输出重定向到其中,而错误输出(异常信息)仍在控制台正常输出。
- 如果想要只输出标准输出,忽略错误输出,则使用2>/dev/null。
- 如果想两者都忽略,则使用>/dev/null 2>&1,这也可以简写为&>/dev/null,也就是最上方示例中所用的。
- 上一条顺序不能反过来变成2>&1 >/deb/null,这种用法的效果是只输出错误输出,而标准输出被重定向到/dev/null中丢弃了,相当于只写了>/dev/null。
④nohup 表示在终端关闭后,此命令不接受挂起信号,仍保持运行。
查看正在运行的脚本
使用命令 ps -ef |grep XXX.sh
若该脚本正在运行中,此处会有2条进程信息:第一条为脚本进程,第二条为此命令本身。每行的第二个数据(如3403和3431)即为该进程的id。
详解:
①ps(process status) 默认只会显示运行在当前控制台下,属于当前用户的进程。
②-e 等同于-A,显示所有进程。
③-f 显示完整格式的输出
④| 将左侧的输出结果,作为右侧的输入
⑤grep(Global search REgular expression and Print out the line),文本搜索工具
⑥XXX.sh 需要搜索的文本
结束脚本运行
使用命令 kill -15 [进程id]
详解:
①kill -15 终止进程。若无法正常终止,可以改用kill -9 强制删除进程。
②[进程id] 在脚本启动时自动生成,也可通过ps命令查看。
来源地址:https://blog.csdn.net/AsrielMao/article/details/129862518