[컴] systemd 등록 방법

systemctl 등록/ register systemd / 부팅때마다 실행 / 자동 실행 / booting 시 실행 / init /

systemd 등록 방법

systemd 에 의해 실행되려면 service unit file 이 있어야 한다. 같은 이름이 이미 존재하면 안된다.

다음 명령으로 현재 존재하는 service 이름들을 확인하자.

sudo systemctl list-unit-files --type-service

sudo vi /etc/systemd/system/myapp.service
sudo chmod 640 /etc/systemd/system/myapp.service

systemctl edit myservice

systemctl edit myservice 로 생성하는 것을 권장한다.(참고로, edit 를 하면, override 되는 값만 넣어야 한다. ExecStart 가 들어가면 ExecStart= 값이 두번있다고 에러가 뜬다.) 만약 존재하지 않는 service 인 경우 systemctl edit --force --full myservice.service 를 사용해서 create 하라고 나온다.

service unit file

/home/myhome/myserver-start.sh 를 실행하도록 하는 service unit file 이다. $MAINPID값은 실행된 service 에 대한 PID 값이다. 그래서 아래처럼 ExecStop 을 하면, 실행된 myserver-start.sh 의 pid 에 대해서 kill 하게 된다.

multi-user.target 은 run level2 로 보면 된다.(참고1, 참고2)

[Unit]
Description=MyApp Service
Wants=network.target mongod.service

[Service]
Environment="SECRET=pGNqduRFkB4K9C2vijOmUDa2kPtUhArN"
Environment="ANOTHER_SECRET=JP8YLOc2bsNlrGuD6LVTq7L36obpjzxd"
Type=simple
User=ec2-user
Group=ec2-user

WorkingDirectory=/home/myhome
ExecStartPre=
ExecStart=/home/myhome/myserver-start.sh
ExecStartPost=
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=

[Install]
WantedBy=multi-user.target

Type=simple or Type=forking

Restart 를 사용할 때 주의할 점

Restart를 넣었더니, 일정시간(RestartSec=1) 이후에 restart 를 시도해 버려서 제대로 실행되지 못했다. (holdoff time over error 가 계속 발생했다.)

확인 테스트

sudo systemctl daemon-reload
sudo systemctl start myapp

booting 때마다 실행하려면

sudo systemctl enable myapp

실행하려는 app 이 shell script 인 경우

shell script 시작부분에 #!/bin/bash 를 넣어주면 된다.

#!/bin/bash

user mode

  • systemctl edit --user --force --full pms-fish
  • systemctl start --user pms-fish
  • systemctl status --user pms-fish
  • journalctl --user -u pms-fish.service -r

User, Group 을 지우고 사용하자. 안그러면, operation not permission error 가 발생한다.

[Unit]
Description=MyApp Service
Wants=network.target mongod.service

[Service]

# User=ec2-user
# Group=ec2-user

...

[Install]
...

See Also

  1. Run a Java Application as a Service on Linux | Baeldung on Linux : java application 에 대한 service 등록
  2. Chapter 1. Working with systemd unit files Red Hat Enterprise Linux 9 | Red Hat Customer Portal
  3. Deploying Spring Boot Applications: Spring Boot 을 systemd 로 실행할때

References

  1. How to Run a Linux Program at Startup with systemd
  2. How To Add Your Own Services to systemd For Easier Management

댓글 없음:

댓글 쓰기