모든 것이 실행 중일 때 시작 시 스크립트를 어떻게 실행합니까?

모든 것이 실행 중일 때 시작 시 스크립트를 어떻게 실행합니까?

나는 라우팅 목적으로 PC를 가지고 있는데, 그 PC에는 2개의 네트워크 인터페이스가 있고 데비안을 실행하고 있습니다. 작동 중임을 알리는 소리를 추가하고 싶습니다.

/etc/init.s/beep-startup그래서 저는 일급 비밀을 기반으로 몇 가지 스크립트를 만들었습니다.LS바이화 매뉴얼(이름 지정에 웃음이 멈추지 않습니다. 죄송합니다.) 여기에는 (수백 개의 LSB 문자열과 함께) 몇 가지 핵심 명령이 포함되어 있습니다.

### BEGIN INIT INFO
# Provides:          beep-startup
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: qwer
# Description:       asdf
### END INIT INFO
case "$1" in
  start)
    #power chord + extreme uprising = fells like its clearly up and feeing good
    beep -f 220 -l 100
    beep -f 330 -l 100
    beep -f 880 -l 100
    ;;
  stop)
    # power chord + slow chirp down, feels like low descending shutdown sound, right after ctrl+alt+del or /sbin/reboot
    beep -f 440 -l 100
    beep -f 330 -l 100
    beep -f 220 -l 100
    ;;
  *)
    echo "Usage: sudo rm / -rf"
esac

그럼 당연히 도망 chmod +x갔지update-rc.d beep-startup defaults

그러나 이제 비결은 실행 중인 것을 볼 때 실제 경고음이 로그인 프롬프트가 나타날 때가 아니라 시스템 시작 중에 발생한다는 것입니다. 따라서 경고음과 로그인 프롬프트 사이에는 2~3초의 간격이 있습니다. 경고음과 올바른 라우팅 시작 사이에는 약 5-7초가 있습니다(4 코어 * 2ghz + 4gb DDR3 RAM, 라우터에는 나쁘지 않음) 종료 경고음은 매력처럼 작동하며 ctrl+alt+del 조합 직후에 거의 즉시 발생합니다. "종료 순서 시작됨"을 확인해야 합니다.

beep로그인 프롬프트를 표시하기 전에 서정적으로 "나노초"가 되기를 바랍니다 . 즉, 및 $all( #everything또는 작성하려는 내용은 정확하고 명확하게 유지됨)가 실제로 초기화를 완료하고 시스템이 로그인을 표시할 준비가 된 후입니다. 즉각적인. 시스템이 모든 작업을 완료한 직후, 로그인 프롬프트가 표시되기 전에 실행되는 자동 실행 스크립트를 어떻게 만들 수 있습니까?


추신. 약간 불만스럽긴 하지만.. 이것은 콘솔 전용 라우터이며 xorg나 기타 다른 것은 없습니다. 필요한 유일한 사용자는 root이고 대부분의 작업은 루트와 관련되어 있습니다. 시스템은 "초기화", "실행", "종료", "전원 끄기"가 가능하며 실행 수준은 필요하지 않습니다. 데비안은 런레벨 없는 배포판에서 진짜 쓰레기입니다바쁜 상자 초기화그런 의미에서 매우 "섹시하다"고 느껴집니다. 나중에 나는 투박한 데비안을 제거하고 buildroot와 같은 배포판으로 전환할 계획입니다. 하지만 이는 프로덕션 환경에서만 발생합니다. 내가 안정을 취하고 어떤 소프트웨어가 필요한지 파악한 후에만 발생합니다. 이제는 개발 및 소프트웨어 사용성 테스트 단계에서 "런타임" 패키지를 추가할 수 있는 가능성이 마음에 듭니다. 지금까지 나는 +에 대해 좋은 경험을 했고, iptables첫 번째 블록이 두 번째일 때 +에 대한 최악의 경험을 겪었을 뿐만 아니라 dnsmasq를 차단하고 전체 WAN 연결을 끊는 등의 경험도 했습니다. 좀 더 사용자 친화적인 솔루션을 찾길 바랍니다. 이제 질문은 "모든 것이 실행된 후 스크립트 실행"에 관한 것입니다.shorewallwebmin/etc/init.d

답변1

여기에는 훌륭한 솔루션이 있습니다. 해결 방법 1: crontab에 @reboot 항목을 생성하여 /usr/local/bin/runonce라는 스크립트를 실행합니다.

mkdir -p를 사용하여 /etc/local/runonce.d/ran이라는 디렉터리 구조를 만듭니다.

다음과 같이 /usr/local/bin/runonce 스크립트를 만듭니다.

    #!/bin/sh
for file in /etc/local/runonce.d/*
do
    if [ ! -f "$file" ]
    then
        continue
    fi
    "$file"
    mv "$file" "/etc/local/runonce.d/ran/$file.$(date +%Y%m%dT%H%M%S)"
    logger -t runonce -p local3.info "$file"
done

이제 다음 재부팅 시(한 번만) 실행하려는 스크립트를 /etc/local/runonce.d 디렉토리에 적절하게 배치하고 chown 및 chmod +x를 배치하십시오. 실행한 후에는 ran 하위 디렉터리로 이동되었으며 이름에 날짜와 시간이 추가된 것을 확인할 수 있습니다. 시스템 로그에도 항목이 있습니다.

데니스 윌리엄스에게 감사드립니다 https://serverfault.com/questions/148341/linux-schedule-command-to-run-once-after-reboot-runonce-equvalent

관련 정보