Linux,Unix,BSD

[bash] rc.local과 유사한 서비스 만들기

채윤아빠 2024. 7. 8. 14:00

개요

기존 ubuntu에서는 한 번만 실행될 명령은 "/etc/rc.local" 파일에 적어 두면 되었습니다.

그러나 ubuntu 버전이 올라가면서 "/etc/rc.local" 파일이 사라졌습니다.

crontab 등에 등록하여 여러 꼼수를 쓸 수도 있지만, "systemd"에 부팅 후, 한 번만 실행되는 서비스로 등록하는 것이 crontab 보다는 여러 장점이 있습니다.

서비스 등록하기

  1. 부팅 후, 한번만 실행될 스크립트를 작성합니다.
sudo vi /usr/local/bin/run-once.sh


부팅 후, 한 번만 실행될 스크립트의 내용은 다음과 같습니다.

#!/bin/bash

# 실행하려는 명령들 작성
# command ...

# 실행 후 스크립트 처리 완료 표시
# touch /tmp/run-once-completed
# systemctl disable run-once.service
  1. 한 번만 실행될 스크립트에 실행 권한을 부여합니다.
sudo chmod +x /usr/local/bin/run-once.sh
  1. systemd용 서비스 등록을 위한 설정 파일을 다음과 같이 작성합니다.
sudo vi /etc/systemd/system/run-once.service


"run-once" 서비스 설정 파일 내용은 다음과 같습니다.

[Unit]
Description=Run Once After Boot Service
After=network.target network-online.target nss-lookup.target
;ConditionPathExists=!/tmp/run-once-completed

[Service]
;Type=oneshot
Type=simple
ExecStart=/usr/local/bin/run-once.sh
RemainAfterExit=yes
TimeoutSec=0

[Install]
WantedBy=multi-user.target
  1. 서비스를 활성화합니다.
sudo systemctl enable run-once.service


서비스가 활성화 되면, 재부팅 하여 정상적으로 동작하는지 확인해 보면 됩니다.


맺는말

위와 같이 "run-once" 서비스를 "systemd"에 등록하면 다음과 같은 장점이 있습니다.

  • 부팅 완료 후 실행되도록 보장
  • crontab과 달리 정확히 1회만 실행됨
  • 실행 여부를 파일로 확인 가능
  • systemd 로그로 실행 결과 확인 가능 (journalctl -u run-once.service)



728x90
반응형