나는 Linux를 처음 사용하고 응용 프로그램을 시작할 것을 기대합니다 (10 초마다 led를 토글합니다). 응용 프로그램을 작성했으며 정상적으로 작동하지만 부팅시 자동으로 시작하려고합니다.
문서 여기가 받는 시작 스크립트를 복사 말한다 /etc/init.d
에 복사 한 스크립트에 심볼릭 링크를 디렉토리를 만들 rc.d
디렉토리.
이 스크립트 파일의 확장자와 이름은 무엇입니까? 심볼릭 링크를 수동으로 추가 할 수 있습니까, rc.d
아니면 이에 대한 특정 절차가 있습니까?
그것을 달성하는 방법에 대한 제안?
답변
다음은 http://www.debian-administration.org/articles/28 에서 발췌 한 것으로 귀하의 질문에 대한 답변입니다.
참고 : 아래 예제 스크립트에서 ” start)
“섹션에 대한 호출을 추가 하여 실제로 프로그램을 시작하십시오. 시스템을 재부팅하지 않고도 스크립트 기능을 테스트 할 수 있습니다. 전체 경로로 호출하고 ” start
“또는 ” stop
” 매개 변수를 지정하십시오.
간다 :
데비안은 시스템 런레벨이 변경 될 때 (예 : 부팅 및 종료 시간) 명령을 실행하기 위해 init 시스템과 같은 Sys-V를 사용합니다.
시스템 부팅시 시작할 새 서비스를 추가하려면 디렉토리에 필요한 스크립트를 추가해야합니다 /etc/init.d/
. 해당 디렉토리에 이미 존재하는 많은 스크립트는 수행 할 수있는 작업의 예를 보여줍니다.
다음은 두 부분으로 나누어지는 매우 간단한 스크립트입니다. 항상 실행되는 코드와 “start”또는 “stop”으로 호출 될 때 실행되는 코드입니다.
#! /bin/sh
# /etc/init.d/blah
#
# Some things that run always
touch /var/lock/blah
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting script blah "
echo "Could do more here"
;;
stop)
echo "Stopping script blah"
echo "Could do more here"
;;
*)
echo "Usage: /etc/init.d/blah {start|stop}"
exit 1
;;
esac
exit 0
파일을 올바른 위치에 저장 한 후 ” chmod 755 /etc/init.d/blah
“를 실행하여 파일이 실행 가능한지 확인하십시오 .
그런 다음 시스템이 다운되거나 가동 될 때 스크립트가 실행되도록 적절한 기호 링크를 추가해야합니다.
가장 간단한 방법은 데비안 특정 명령을 사용하는 것입니다 update-rc.d
.
root@skx:~# update-rc.d blah defaults
Adding system startup for /etc/init.d/blah ...
/etc/rc0.d/K20blah -> ../init.d/blah
/etc/rc1.d/K20blah -> ../init.d/blah
/etc/rc6.d/K20blah -> ../init.d/blah
/etc/rc2.d/S20blah -> ../init.d/blah
/etc/rc3.d/S20blah -> ../init.d/blah
/etc/rc4.d/S20blah -> ../init.d/blah
/etc/rc5.d/S20blah -> ../init.d/blah
답변
가장 좋은 방법은 일반적인 시스템 서비스 (예 : OpenSSH)의 배포 패키지 소스를 확인하는 것입니다. 모범 사례가 무엇인지 알 수 있습니다. 결국 오픈 소스의 배후에있는 이유 중 하나는 소스에서 배울 수 있기 때문입니다.
답변
인수로 시작 응용 프로그램을 관리하고 기록하는 효과적인 프로그램 인 Supervisor를 사용하십시오. http://supervisord.org/running.html 에서 자세히 알아보고 설치 지침을 따르십시오.
conf 파일을 /etc/supervisor/conf.d/{PROGRAM_NAME}.conf
만들고 여기에 코드가 있습니다.
[program:{PROGRAM_NAME}]
command=/usr/bin/{PROGRAM_NAME} -arg1 -arg2
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/{PROGRAM_NAME}.err.log
stdout_logfile=/var/log/supervisor/{PROGRAM_NAME}.out.log
그런 다음 cmd 줄에서 실행하십시오.
supervisorctl reload
답변
사용 crontab
이 훨씬 쉽습니다.
crontab -e
사용자의 crontab을 편집하는 데 사용 합니다.
끝에 다음 줄을 추가하십시오.
@reboot <command>
예 :
@reboot my_script.sh
@reboot python my_script.py arg1 arg2
마지막으로 crontab -l
스크립트가 목록에 추가되었는지 확인하십시오.
답변
@AlexanderShcheblikin이 말한 것처럼 최신 버전의 Linux 지원 systemd
. 데비안 전용 솔루션보다 더 많은 기능을 가지고 있으며 이식성이 뛰어납니다.
이 위대한 가이드를 읽으십시오 .
다음은 필요한 최소값에 대한 빠른 참조입니다 .
myscript.sh
실행 권한이 있는 스크립트 (예 🙂- 스크립트 실행 명령이 포함 된 644 권한의
myservice.service
확장자가 “.service”인 단위 파일 (예 🙂/etc/systemd/system
예를 들어
:
[Unit]
Description=Example systemd service.
[Service]
Type=simple
ExecStart=/bin/bash /path/to/myscript.sh
[Install]
WantedBy=multi-user.target
sudo systemctl enable myservice
부팅시 시작할 수 있도록 명령 을 실행하십시오 .