您的位置:

Linux运维工程师必备:使用nohup持久化运行命令

一、何为nohup

nohup命令是在Unix和Linux操作系统上用于在系统关闭、用户退出登录或网络中断情况下继续运行命令的一个程序,即不挂断的运行命令。

当一个终端连接因某种原因断开时,与该终端相关联的进程会收到HUP(hangup)信号,这也是nohup命令得名的原因。使用nohup命令可使程序在后台运行,与当前用户所在的Shell无关,并且可防止进程在连接退出时被Hangup信号所终止。

二、nohup的使用方法

nohup命令的使用十分简单,只需在命令前加上nohup即可,同时结尾处加上&符号表示该命令挂起。

nohup command &

其中,command为要运行的命令,&符号表示挂起该命令,使其在后台继续运行。

如下面的例子,使用nohup命令启动一个Python脚本文件:

nohup python test.py &

执行上述命令后,系统将提示nohup.out的文件名以及进程号,同时Python脚本文件将在后台运行。

三、nohup的参数介绍

nohup命令除了基本的使用方法外,还提供了一些参数可供使用。

1. -n

指定输出文件名。使用-n参数可指定nohup命令输出信息写入的文件名。例如,下面的命令将输出重定向到mylog文件:

nohup -n mylog command &

2. -p

指定pid文件名。使用-p参数可指定nohup命令的pid文件名。pid文件是进程号ID存放的文件,通过该文件可随时掌握nohup命令的进程情况。

nohup -p pidfile command &

3. -s

指定信号文件。使用-s参数可指定nohup命令的信号文件。信号文件用于存储nohup命令接收到的信号。

nohup -s signalfile command &

四、nohup的示例

示例1:

在后台运行一个Python脚本,输出信息保存到mylog文件中。

nohup -n mylog python test.py &

示例2:

在后台运行一个名为cp的进程,输出信息保存到mylog文件中。

nohup -n mylog cp /path/from /path/to &

示例3:

在后台运行一个名为copy的进程,并把pid信息保存到my.pid文件中。

nohup -p my.pid copy /path/from /path/to &

示例4:

在后台运行一个名为myshell的shell脚本。

nohup sh myshell.sh &

五、注意事项

使用nohup命令后,可使命令在后台运行,即使用户退出登录,整个程序也仍然能够运行,同时标准输出和标准错误都被重定向到了nohup.out文件中。

然而,有些命令会试图从标准输入中获取信息,此时可能会阻塞nohup命令的执行。为了避免这种情况,可以使用/dev/null将标准输入重定向到空设备:

nohup command < /dev/null > nohup.out 2>&1 &

六、总结

nohup命令是Linux运维工程师进行命令持久化运行的必备工具,能够在后台使命令持续执行,即使用户退出登录,保证程序的正常运行。