您的位置:

Linux运维:使用nohup&实现进程后台运行

一、nohup是什么

nohup是Linux系统中自带的命令,能够将一个指定的命令或脚本执行在后台,并不受终端的关闭影响。即使终端关闭或断开网络连接,进程仍然在后台运行。

基本语法:nohup Command &

nohup command &  

//使用实例:  
nohup ./test.sh &  

二、使用场景

在日常生产中,我们经常需要执行一些比较耗时的操作,比如大量文件的拷贝、大数据量的备份等。由于这些操作比较耗费时间,如果不使用nohup命令,就需要等待终端命令的执行结果;而使用nohup命令后,进程将后台运行,不影响我们的其他操作,也不会因为终端关闭而停止。

三、实例演示

以备份数据库为例演示nohup的使用。

1、先创建一个用于备份的脚本:

#!/bin/bash
database=demo
backup_path=/opt/backup/mysqldump
time=`date +%Y%m%d_%H%M%S`
suffix=".sql"
dumpfilename=$backup_path/$database-$time$suffix
/usr/bin/mysqldump -u root $database > $dumpfilename

2、执行备份脚本:

sh mysql_backup.sh 
dumpfile saved at /opt/backup/mysqldump/demo-20211211_132803.sql

3、修改脚本使用nohup命令后台执行:

nohup sh mysql_backup.sh &

//执行后返回类似以下信息:
[1] 6599
nohup: ignoring input and appending output to 'nohup.out'

4、将nohup命令输出到指定文件:

nohup sh mysql_backup.sh > /opt/backup/log/mysql_backup.log 2>&1 &

四、注意事项

1、当耗时较长的进程运行时,使用nohup命令后,在原始目录下会出现一个nohup.out文件。这个文件是nohup自动生成的,用来存储输出到终端的信息。如果你不想输出到该文件中,可以使用“>”符号将输出重定向到其他文件中。

2、nohup命令一般用于长时间运行的任务,如备份、上传、下载等命令。在运行耗时较短的命令时,反而容易出现问题(如满足不了预期),而且这些问题比较难以排查。

3、nohup命令无法用于交互式进程,如SSH会话等。

五、总结

nohup命令是一个实用的Unix/Linux命令,可以在终端关闭后使进程继续后台运行,解决了很多日常操作需求的问题。在使用nohup命令时,需要注意以上注意事项,可以更好的发挥nohup的作用。