nohup
(no hang-up)命令在Linux中用于在用户退出登录后继续运行指定的程序或脚本。它可以使进程忽略挂起(SIGHUP)信号,从而在关闭终端或断开SSH连接后仍然保持运行。以下是一些实际应用案例:
假设你需要运行一个长时间运行的脚本或程序,并且希望在关闭终端后它仍然继续执行。
nohup ./my_long_running_script.sh &
这条命令会在后台运行my_long_running_script.sh
,并且即使你关闭终端,脚本也会继续执行。输出会被重定向到nohup.out
文件中。
你可以使用nohup
结合cron
来运行定时任务,确保任务在系统重启后仍然能够执行。
nohup /path/to/your/script.sh &
然后在crontab
中添加如下条目:
@reboot /path/to/your/script.sh
这样,系统每次启动时都会自动运行该脚本。
如果你需要运行一个服务守护进程,并且希望它在系统重启后自动启动,可以使用nohup
结合systemd
或init.d
脚本。
systemd
创建一个systemd
服务文件:
[Unit]
Description=My Custom Service
[Service]
ExecStart=/path/to/your/script.sh
Restart=always
[Install]
WantedBy=multi-user.target
然后启用并启动服务:
sudo systemctl enable my_custom_service.service
sudo systemctl start my_custom_service.service
init.d
创建一个init.d
脚本:
#!/bin/sh
### BEGIN INIT INFO
# Provides: my_custom_service
# Required-Start: $local_fs $network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: My custom service
### END INIT INFO
case "$1" in
start)
nohup /path/to/your/script.sh &
;;
stop)
# Add commands to stop the service if necessary
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
然后设置脚本权限并启用服务:
sudo chmod +x /etc/init.d/my_custom_service
sudo update-rc.d my_custom_service defaults
如果你需要通过SSH远程执行一个命令,并且希望该命令在断开连接后仍然继续运行,可以使用nohup
。
ssh user@remote_host "nohup /path/to/your/script.sh &"
使用nohup
可以方便地将程序的输出重定向到日志文件,便于后续查看和分析。
nohup ./my_script.sh > output.log 2>&1 &
这条命令会将标准输出和标准错误都重定向到output.log
文件中。
通过这些应用案例,你可以看到nohup
命令在Linux系统中的强大功能和灵活性。