在 CentOS 中,nohup 命令用于在后台运行程序,即使关闭终端或断开连接,程序也会继续运行
使用 wait 命令:
在脚本中,你可以使用 wait 命令等待一个或多个子进程完成。例如:
#!/bin/bash
nohup your_command &
pid=$!
wait $pid
echo "Command finished."
这里,your_command 是你要执行的命令,$! 获取了 nohup 命令的进程 ID,wait 命令会等待该进程完成。
使用 trap 命令:
trap 命令允许你在脚本退出时执行一个函数。你可以使用它来检查子进程是否已经完成。例如:
#!/bin/bash
finish() {
echo "Command finished."
exit 0
}
trap finish EXIT
nohup your_command &
pid=$!
wait $pid
这里,当脚本退出时,finish 函数会被调用,输出 “Command finished.”。
使用 systemd 服务:
如果你希望更好地管理后台进程,可以考虑创建一个 systemd 服务。首先,创建一个服务文件,例如 /etc/systemd/system/your_service.service:
[Unit]
Description=Your service description
[Service]
ExecStart=/path/to/your_command
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后,运行以下命令启用和启动服务:
sudo systemctl enable your_service
sudo systemctl start your_service
这样,你的命令将在后台运行,并在完成时自动重启(如果失败)。你可以使用 systemctl status your_service 查看服务状态。
请注意,这些方法并不能保证命令一定执行完毕,但它们可以帮助你确保命令在预期的情况下完成。