저는 Debian 7 Wheezy를 실행하고 있으며 인터넷에 완전히 연결되면 부팅 시 시작할 화면이 필요합니다. 단, 인터넷 연결이 중단되었다가 다시 연결되는 경우에는 그러하지 않습니다. 따라서 시작 후 처음으로 사용 가능한 인터넷 연결에서만 가능합니다.
이에 대한 더미 스크립트를 게시하고 이를 어디에 배치하고 주어진 조건에서 실행되도록 할 수 있습니까?
스크립트는 화면을 시작한 다음 종료하기만 하면 되지만 화면은 계속되어야 합니다.
편집하다
이 폴더에 대해 들었습니다 /etc/network/if-up.d/
. 그러나 인터넷 연결이 끊어졌다가 다시 연결되는 경우 스크립트가 다시 실행되지 않도록 하려면 어떻게 해야 합니까?
답변1
스크립트를 넣고 /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.
답변2
매우 적합한 직업입니다systemd
.
스크립트를 시스템 서비스로 실행
시스템이 실행 중인 경우체계, 그런 다음 수명 주기 및 실행 환경에 대한 제어는 물론 네트워크 가동 및 실행, 실패 시 다시 시작 등과 같은 스크립트 시작을 위한 전제 조건을 제공하는 시스템 서비스로 실행되도록 스크립트를 구성할 수 있습니다.
귀하의 서비스에 권장되는 폴더는 다음과 같습니다. /etc/systemd/system/
또 다른 옵션은 이지만 /lib/systemd/system
일반적으로 OOTB 서비스에만 사용해야 합니다.
다음과 같은 파일을 만듭니다 sudo vim /etc/systemd/system/autossh.service
.
[Unit]
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
# By default type 'simple' is used, see also https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
# Type=simple|exec|forking|oneshot|dbus|notify|idle
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 또는 의 변수 등)에 대해 어떠한/.bashrc
가정도 하지 마십시오~/.zshrc
.Environment
키(스크립트가 특정 변수를 정의해야 하는 경우).set -x
Bash 스크립트 상단에 추가한 후 실행하면systemctl status my_service
스크립트가 실패한 이유를 파악하는 데 도움이 될 수 있습니다. 원칙적으로 항상 사용하십시오.절대 경로모든 것에 대해 를 추가echo
하거나 $PATH를 명시적으로 정의합니다Environment=MYVAR=abc
.
답변3
/etc/rc6.d/
인터넷 연결은 의 항목으로 시작될 수 있습니다 S35networking
. 파일을 변경하고 마지막에 명령을 삽입하거나 파일을 추가 하고 파일에 /etc/init.d/mystuff
링크한 다음 명령을 삽입하면 네트워크가 시작되자마자 작업이 시작됩니다./etc/rc0.d/S36mystuff