데비안에서 부팅할 때 특정 스크립트를 로드하려고 합니다.
/etc/rc.local에 스크립트를 배치하려고 시도했지만 성공하지 못했습니다.
이제 특정 스크립트를 실행하는 서비스 스크립트를 만들었습니다. 서비스 스크립트의 코드는 다음과 같습니다.
#!/bin/sh
### BEGIN INIT INFO
# Provides: script
# Required-Start: $local_fs $network $named $time $syslog
# Required-Stop: $local_fs $network $named $time $syslog
# Default-Start: 5
# Default-Stop: 0 1 6
# Short-Description: Start script at boot time
# Description: Enable service .
### END INIT INFO
case "$1" in
start)
echo "Starting script"
/usr/local/bin/script1
;;
stop)
echo "Stopping script"
;;
*)
echo "Usage: /etc/init.d/script {start|stop}"
exit 1
;;
esac
exit 0
이제 다음을 사용하여 내 스크립트가 서비스로 실행되고 있는지 테스트할 수 있습니다.sudo service <script> start
내 코드 /usr/local/bin/script1
는 다음과 같습니다
#!/bin/sh
exec 5> >(logger -t $0)
BASH_XTRACEFD="5"
PS4='$LINENO: '
set -x
FILE=/share/_ngrok
NAO_ESTA_ESCRITO=0
touch $FILE
/usr/local/bin/ngrok tcp 22 --region eu > /dev/null &
sleep 5
URL=`/usr/local/bin/ngrok_url`
grep -q -F "$URL" $FILE || NAO_ESTA_ESCRITO=1
if [ $NAO_ESTA_ESCRITO -eq 1 ]; then
/usr/local/bin/ngrok_url > $FILE
/usr/bin/drive push -no-prompt -quiet $FILE
fi
exit 0
bash에서 실행 하면 /usr/local/bin/script1
성공적으로 실행되지만 실행하면 sudo service servicescript start
그렇지 않습니다. 그런데 이렇게 하면 sudo service servicescript otherarg
성공적으로 실행되므로 서비스 스크립트가 정상적으로 구성됩니다. 단지 start
서비스가 작동하지 않는다는 것 입니다 .
이 작업을 수행하면 sudo service servicescript start
다음 오류가 발생합니다.
script.service 작업이 실패했습니다. 자세한 내용은 "systemctl status script.service" 및 "journalctl -xn"을 참조하세요.
이 작업을 수행하면 systemsctl status script.service
다음 메시지가 나타납니다.
● script.service - INFO
로드됨: 로드됨(/etc/systemd/system/script.service; 활성화됨)
활동: Qui 2017-03-23 17:19:25 WET 이후 실패했습니다(결과: 종료 코드). 35초 전
프로세스: 7710 ExecStop=/usr/local/bin/killscript (코드=종료, 상태=0/SUCCESS)
프로세스: 11689 ExecStart=/usr/local/bin/script1(코드=종료, 상태=2)
마스터 PID: 11689(코드=종료, 상태=2)
답변1
세 가지 초기화 시스템을 모두 혼합하고 있는 것 같습니다.
- 시스템 초기화
/etc/init.d/daemon start/stop/restart
- 갑자기 나타나다
service daemon start
- 체계
systemsctl status script.service
init
귀하의 시스템이 무엇인지 알아보십시오
stat /proc/1/exe
파일: '/proc/1/exe' -> '/lib/systemd/systemd'
따라서 systemd는 최신의 새로운 표준입니다.
이를 수행하는 방법에 대한 링크는 다음과 같습니다. 시스템 Linux에서 부팅 시 쉘 스크립트를 자동으로 실행하는 방법
비대화형 쉘에는 env가 설정되어 있지 않으므로 PATH
PATH를 설정하거나 각 명령에 전체 경로를 제공해야 합니다(예: ) /bin/sleep
.
대신 로그 파일을 systemd
사용할 수도 있습니다 . 이 경우에는 로 journald
대체합니다 .logger
systemd-cat