再起動時にスクリプトを一度実行できますか?

再起動時にスクリプトを一度実行できますか?

CentOS9

次の質問に留意してください。https://serverfault.com/questions/1099284/centos-how-to-keep-previous-service-state-on-reboot

私が必要なことを達成できないようです。そうですか?

必要なもの - スクリプトを実行してサービスを停止し、ログを収集して圧縮し、OSを更新して再起動します(カーネル更新がある場合)。私の問題は、再起動後にサービスが再起動されることです。これは望ましくありません。

この問題を解決する1つの方法は、CentOSに特定の再起動時に(再起動時にではなく)スクリプトを実行させることです。したがって、このスクリプトは上記のスクリプトから再起動した後にのみ実行できます。スクリプトはサービスを再び停止します。

これを行う方法はありますか?

答え1

「フラグ」ファイルと操作を使用できます@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ファイルを作成または作成しないことで動作を制御できます。

答え2

何が必要かわかりませんが、説明した内容を達成するには2つの方法があります。

  • 「適切な終了」スクリプトを作成します。ここでログを管理し、次の実行のためのファイルフラグを設定し(起動スクリプトは次の起動時にこのフラグを読み込みます)、サービスを管理するなどのタスクを実行します。その後、スクリプト自体でシャットダウンを実行します。スクリプトが準備されたら、使用しているWMに移動して、通常の終了ボタンの代わりにスクリプトを配置します。
  • SIGTERM、SIGINTなどをキャプチャするアプリケーション(Cが最も簡単)を作成します(man 7 signal)。コンピュータの起動時に悪魔としてアプリケーションを実行します。アプリケーションが SIGTERM を捕捉すると、ログ収集スクリプトが呼び出されます。

次のタスクセッションでスクリプトが実行されないようにする必要がある場合は、いつでもサービスに設定して通常のサービス管理を許可できます(man systemd)。あるいは、スクリプトにいくつかのフラグファイルが存在するかどうかを確認できます。存在する場合はすぐに終了し、対応するフラグファイルを削除(または削除しない)します(これは次のセッションに影響します)。

答え3

スクリプトを2つの異なるタスクに分けました。 1つはOSアップデートを実行して再起動することで、もう1つは(1時間後)ログを収集/圧縮するために必要です。

関連情報