베어본 Linux 배포판이 포함된 IoT 장치가 있습니다. 아니요 crontab
, chkconfig
또는 update-rc
.
장치의 모든 항목이 로드된 후 장치가 부팅될 때 스크립트를 어떻게 실행합니까? 스크립트를 추가할 수 있다고 생각했는데 /etc/init.d
아무 일도 일어나지 않는 것 같습니다. 이것이 내가 사용하는 스크립트입니다.
#! /bin/sh -e
# /etc/init.d/camstart
. /etc/init.d/functions.sh
start() {
/usr/local/packages/application/myapp
}
stop() {
kill `pidof myapp`
kill `pidof myappinternal`
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
pidof myapp
pidof myappinternal
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
내가 가진 또 다른 아이디어는 를 사용하는 것이었지만 /etc/rc.local
장치에 해당 파일이 없습니다. rc?.d
1~6부터 S까지의 폴더 가 있습니다 . 둘 중 하나에 스크립트를 넣는 것은 아무런 효과가 없는 것 같습니다.
어떤 제안이 있으십니까?
편집: 어떤 Linux 배포판인지는 잘 모르겠지만 확인 결과 /etc/*release
Yocto 프로젝트의 Poky를 기반으로 한 것으로 나타났습니다. /proc/version
Linux 버전 4.9.62 부터 시작됩니다.
내가 아는 한 서비스를 systemctl
시작 하는 데 사용됩니다 systemd
.
EDIT2: 언급하는 것을 잊었습니다. systemd
내 스크립트에 대한 서비스를 작성하고 이를 사용하여 시작하려고 시도했지만 systemctl start app
즉시 종료됩니다 exit code 0
.
애플리케이션 서버:
[Unit]
Description=app
After=acap-pre.target
Requires=acap-pre.target
[Service]
Slice=extension-acap.slice
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/init.d/app start
ExecStop=/etc/init.d/app stop
최종 편집: 확인한 후에는 정상적으로 작동합니다.시스템 시작 스크립트를 작성하는 방법내 것이 systemd service
없어진 걸 발견했어요
[Install]
WantedBy=multi-user.target
답변1
런레벨 3에서 데몬을 자동으로 시작하는 과정은 간단합니다:
- 스크립트를 에 넣고
/etc/init.d
, - 스크립트의 권한과 소유권을 확인하고,
/etc/rc3.d
다음 이름을 사용하여 스크립트에 대한 심볼릭 링크를 만듭니다S99scriptmame
.
S
방법서비스 시작. 이 숫자는 01
(가장 높은 우선순위 스크립트) 부터 99
(마지막 우선순위 스크립트) 까지 서비스 시작 순서의 순위를 매기는 데 사용됩니다 .
/etc/rc0.d
/etc/rc6.d
아마도 명명된 (stop) 및 (restart) 에서 스크립트 링크를 생성해야 하는 경우일 것입니다 K01scriptname
. 일반적으로 마지막으로 시작된 데몬이 가장 먼저 중지됩니다.
바라보다man init.d
^1완전한 설명을 위해.