Bash

我可以在重新啟動時執行一次腳本嗎?

  • May 1, 2022

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)。或者您的腳本可以檢查某些標誌文件的存在 - 如果它存在立即退出並刪除(或不刪除)該標誌文件(這會影響下一個會話)。

引用自:https://unix.stackexchange.com/questions/700963