Bash
我可以在重新啟動時執行一次腳本嗎?
CentOS9
記住這個問題:https ://serverfault.com/questions/1099284/centos-how-to-keep-previous-service-state-on-reboot
似乎無法實現我所需要的。那是對的嗎?
我需要什麼 - 執行一個腳本來停止服務,收集和壓縮日誌,然後更新作業系統並重新啟動(如果有核心更新)。我的問題是重新啟動後服務再次啟動。這是不可取的。
解決它的一種方法是讓 CentOS 在這個特定的重啟時執行一個腳本,而不是任何重啟。所以這個腳本只能在從上述腳本重新啟動後執行。腳本再次停止服務..
有沒有辦法這樣做?
您可以使用“標誌”文件和
@reboot
cron
作業:#!/bin/bash # flag file must exist across reboots flag="/tmp/myflagfile" # # if there is no $flag, this is the 1st time if [[ ! -f "$flag" ]] ; then touch "$flag" do_firsttime else rm "$flag" do_secondtime fi
$flag
您可以通過創建(或不創建)文件來控制行為。
不確定我是否了解您的需求,但我看到了兩種方法來做您所描述的事情:
- 製作“正確關機”腳本。從中管理日誌,設置下次執行的文件標誌(將在下次啟動時由啟動腳本讀取),管理服務等。然後從腳本本身關閉。腳本準備好後,轉到您正在使用的 WM 並放置該腳本而不是正常的關機按鈕。
- 編寫一個擷取 SIGTERM、SIGINT 等()的應用程序(C 將是最簡單的
man 7 signal
)。在機器啟動時將該應用程序作為惡魔啟動。一旦應用程序擷取 SIGTERM - 呼叫日誌收集腳本。如果您需要該腳本不在下一個工作會話中執行,您可以隨時將其設置為服務並接受正常的服務管理 (
man systemd
)。或者您的腳本可以檢查某些標誌文件的存在 - 如果它存在立即退出並刪除(或不刪除)該標誌文件(這會影響下一個會話)。