nohup(no hang-up)命令在Linux中用于在用户退出登录后继续运行指定的命令或脚本。以下是一些高级用法和技巧:
基本命令格式:
nohup command [arguments] &
例如:
nohup myscript.sh &
输出重定向:
默认情况下,nohup会将标准输出和标准错误输出重定向到当前目录下的nohup.out文件。你也可以显式指定输出文件:
nohup command > output.log 2>&1 &
后台运行:
使用&符号将命令放入后台运行。
使用disown命令:
如果你已经启动了一个命令,但希望它不受终端关闭的影响,可以使用disown命令:
nohup command &
disown
使用screen或tmux:
screen和tmux是终端复用工具,可以在一个终端会话中运行多个终端窗口,并且即使断开连接,这些窗口也会继续运行。
screen -S mysession
mycommand
# 按 Ctrl+A 然后 D 断开连接
重新连接:
screen -r mysession
使用systemd服务:
对于需要长期运行的服务,可以创建一个systemd服务单元文件来管理。
[Unit]
Description=My Service
[Service]
ExecStart=/path/to/command
Restart=always
[Install]
WantedBy=multi-user.target
然后启用并启动服务:
sudo systemctl enable myservice.service
sudo systemctl start myservice.service
使用cron定时任务:
如果你需要定期运行某个命令,可以使用cron定时任务。
编辑crontab文件:
crontab -e
添加一行:
0 * * * * /path/to/command >> /path/to/logfile.log 2>&1
使用at命令:
at命令用于在指定时间运行一次性任务。
提交任务:
echo "/path/to/command" | at now + 1 minute
查看任务:
atq
删除任务:
atrm <job_number>
使用nohup结合&和wait:
如果你有多个命令需要依次运行,可以使用wait命令等待所有后台进程完成。
nohup command1 &
nohup command2 &
wait
nohup命令会忽略挂起信号(SIGHUP),因此即使终端关闭,命令也会继续运行。nohup时,确保输出文件路径正确,并且有写权限。systemd服务,因为它提供了更多的管理和监控功能。通过这些高级用法和技巧,你可以更灵活地使用nohup命令来管理Linux系统中的后台任务。