재부팅 시 스크립트를 한 번 실행할 수 있나요?

재부팅 시 스크립트를 한 번 실행할 수 있나요?

CentOS9

다음 질문을 명심하세요.https://serverfault.com/questions/1099284/centos-how-to-keep-previous-service-state-on-reboot

내가 필요한 것을 달성할 수 없는 것 같습니다. 그렇죠?

필요한 것 - 스크립트를 실행하여 서비스를 중지하고 로그를 수집 및 압축한 다음 OS를 업데이트하고 다시 시작합니다(커널 업데이트가 있는 경우). 내 문제는 재부팅 후 서비스가 다시 시작된다는 것입니다. 이는 바람직하지 않습니다.

이 문제를 해결하는 한 가지 방법은 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

필요한 것이 무엇인지 잘 모르겠지만 설명하신 내용을 달성하는 데는 두 가지 방법이 있습니다.

  • "적절한 종료" 스크립트를 작성하십시오. 여기에서 로그를 관리하고, 다음 실행을 위한 파일 플래그를 설정하고(시작 스크립트는 다음 부팅 시 이 플래그를 읽습니다), 서비스를 관리하는 등의 작업을 수행합니다. 그런 다음 스크립트 자체에서 종료를 수행하십시오. 스크립트가 준비되면 사용 중인 WM으로 이동하여 일반 종료 버튼 대신 스크립트를 배치합니다.
  • SIGTERM, SIGINT 등을 포착하는 애플리케이션(C가 가장 쉬움)을 작성합니다( man 7 signal). 컴퓨터 시작 시 악마로 애플리케이션을 실행합니다. 애플리케이션이 SIGTERM을 포착하면 로그 수집 스크립트가 호출됩니다.

다음 작업 세션에서 스크립트가 실행되지 않도록 해야 하는 경우 언제든지 서비스로 설정하고 정상적인 서비스 관리를 허용할 수 있습니다( man systemd). 또는 스크립트에서 일부 플래그 파일이 존재하는지 확인할 수 있습니다. 존재하는 경우 즉시 종료하고 해당 플래그 파일을 삭제(또는 삭제하지 않음)합니다(이는 다음 세션에 영향을 미칩니다).

답변3

스크립트를 두 가지 다른 작업으로 나누었습니다. 하나는 OS 업데이트를 실행하고 재부팅하는 것이고, 다른 하나는(1시간 후) 로그 수집/압축에 필요한 것입니다.

관련 정보