데비안 7 Wheezy를 실행 중이며 인터넷에 완전히 연결되는 즉시 시작시 일부 화면을 시작해야합니다. 그러나 인터넷 연결이 끊어지고 다시 연결된 경우에는 그렇지 않습니다. 따라서 부팅 후 첫 번째 기능성 인터넷 연결에서만.
이것에 대한 더미 스크립트를 게시하고 주어진 조건에서 스크립트를 어디에 넣고 실행할 수 있는지 알려주십시오.
스크립트는 화면을 시작한 다음 종료하면되지만 화면은 계속 진행해야합니다.
편집
이미 /etc/network/if-up.d/
폴더에 대해 들었습니다 . 그러나 인터넷 연결이 끊긴 다음 다시 설정되면 스크립트가 다시 실행되지 않도록하려면 어떻게해야합니까?
답변
스크립트를 /etc/network/if-up.d
넣고 실행 가능하게 만드십시오. 네트워크 인터페이스가 나타날 때마다 자동으로 실행됩니다.
부팅 할 때마다 처음으로 실행될 때만 작동하게하려면 처음 생성 한 플래그 파일이 있는지 확인하십시오. 예:
#!/bin/sh
FLAGFILE=/var/run/work-was-already-done
case "$IFACE" in
lo)
# The loopback interface does not count.
# only run when some other interface comes up
exit 0
;;
*)
;;
esac
if [ -e $FLAGFILE ]; then
exit 0
else
touch $FLAGFILE
fi
: here, do the real work.
답변
이것은 매우 적합한 직업입니다 systemd
.
시스템 서비스로 스크립트 실행
시스템에서 systemd를 실행중인 경우 수명주기 및 실행 환경을 제어하고 네트워크 시작 및 실행과 같은 스크립트 시작을위한 사전 조건을 제공하는 시스템 서비스로 실행되도록 스크립트를 구성 할 수 있습니다.
자신의 서비스에 권장되는 폴더는 /etc/systemd/system/
다른 옵션 /lib/systemd/system
이지만 일반적으로 OOTB 서비스에만 사용되어야합니다.
예를 들어 다음과 같이 파일을 작성하십시오 sudo vim /etc/systemd/system/autossh.service
.
[Unit]
# By default 'simple' is used, see also https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
# Type=simple|forking|oneshot|dbus|notify|idle
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target
[Service]
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=pkill -9 autossh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody
# Useful during debugging; remove it once the service is working
StandardOutput=console
[Install]
WantedBy=multi-user.target
이제 서비스를 테스트 할 수 있습니다 :
sudo systemctl start autossh
서비스 상태 확인 :
systemctl status autossh
서비스 중지
sudo systemctl stop autossh
서비스가 예상대로 작동하는지 확인한 후 다음을 사용하여 활성화하십시오.
sudo systemctl enable autossh
참고 : 보안을 위해 스크립트가 실행
systemd
되는 방식과 유사하게 제한된 환경에서crontab
스크립트를 실행하므로 $ PATH와 같은 기존 시스템 변수에 대해 가정하지 마십시오.Environment
스크립트에 특정 변수를 정의해야하는 경우 키를 사용하십시오 .set -x
bash 스크립트 맨 위에 추가 한 다음 실행systemctl status my_service
하면 스크립트가 실패한 이유를 식별하는 데 도움이 될 수 있습니다. tumb의 원칙으로 항상을 포함하여 모든 것에 절대 경로 를 사용하거나을echo
추가하여 $ PATH를 명시 적으로 정의하십시오Environment=MYVAR=abc
.
답변
인터넷 연결은 /etc/rc6.d/
아마도 항목에 의해 발생합니다 S35networking
. 해당 파일을 변경하고 끝에 명령을 삽입하거나 파일에 /etc/init.d/mystuff
링크 /etc/rc0.d/S36mystuff
를 추가하고 명령을 삽입하면 네트워크가 시작되는 즉시 시작됩니다.