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系統中的強大功能和靈活性。