SW 개발

initab(rc) 없을때 systemd 를 이용하여 init script 만들기

. . . 2019. 10. 2. 17:00
반응형

증상

yocto 에서 busybox 를 빌드후에 보니... inittab 도 없다. rcS 도 없다. rc.local 도 없다.

대체 user init script 는 어디다가 넣어야할까?

systemd

최근 트랜드?엔 inittab, init.d말고 systemd 를 쓰는것 같다.

systemd 에 대한 설명은 구글링하면 많이나오니 대략적으로 스터디를 추천한다.

systemd 확인방법은 다음과 같다.

> ls -al /sbin/init
lrwxrwxrwx 1 root root 20 Aug 28  2019 /sbin/init -> /lib/systemd/systemd

/sbin/init 를 보면 현재 init 시스템이 어떤것인지 확인가능하다. 위의시스템의 경우 /sbin/init -> /lib/systemd/systemd 이므로 init 시스템은 systemd 이다.

systemd 등록하기

1. 서비스파일 작성하기

/etc/systemd/system/ 폴더에 서비스 파일을 작성하고 권한을 수정한다.

sudo touch /etc/systemd/system/foo-daemon.service
sudo chmod 664 /etc/systemd/system/foo-daemon.service

이때의 foo-daemon.service 파일 내용은 다음과 같이 세팅하면된다. (적절히 수정할것)

[Unit]
Description=Foo

[Service]
Type=simple
ExecStart=/usr/sbin/foo-daemon

[Install]
WantedBy=multi-user.target
  • init script 대용으로 간단히 1회만 실행하고 끝낼것이기 때문에 Type=simple 로 작성한다.
  • ExecStart=/usr/sbin/foo-daemon 부분에 실제 동작할 스크립트의 path 를 넣는다.
    • /usr/sbin/foo-daemonshell script 형식으로 작성

2. systemd 서비스 등록

서비스가 잘동작하는지 테스트를 위해서 등록한 systemd를 실행해본다.

sudo systemctl daemon-reload
sudo systemctl start foo-daemon

위의 명령은 1회성이며, 매 부팅시마다 동작시키기위해서는 다음의 명령어로 서비스 등록한다.

systemctl enable foo-daemon

이후에 부팅하게되면 /usr/sbin/foo-daemon 가 매번실행된다.

끗.

반응형