데비안 시작 스크립트를 시작할 수 없습니다

데비안 시작 스크립트를 시작할 수 없습니다

데비안에서 부팅할 때 특정 스크립트를 로드하려고 합니다.
/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가 설정되어 있지 않으므로 PATHPATH를 설정하거나 각 명령에 전체 경로를 제공해야 합니다(예: ) /bin/sleep.

대신 로그 파일을 systemd사용할 수도 있습니다 . 이 경우에는 로 journald대체합니다 .loggersystemd-cat

관련 정보