최근 출시된 Ubuntu 배포판 버전들 (16.10 이상 및 18.04 등) 에서는 전통적인SysVinit 방식 대신 systemd를 시초화 및 프로세스 관리의 표준으로 채택하고 있습니다. 이로 인해 기존에 사용하던 명령어와 설정 파일 구조가 변경되었으며, 특히 서비스의 시동 등록 절차에서 큰 차이를 보입니다.
명령어 및 서비스 관리의 변화
과거에는 특정 서비스를 제어할 때 service 또는 chkconfig 명령을 주로 사용했습니다. 예를 들어 데이터베이스 엔진을 시작하려면 다음과 같이 입력했습니다.
sudo service mysql start
하지만 systemd 환경에서는 동일한 동작이 systemctl 유틸리티를 통해 수행됩니다.
sudo systemctl start mysqld.service
명령어 자체의 변경보다는 시동 등록 과정이 복잡해졌다는 점이 더 큰 고려 사항입니다. systemd 는 기본 설정을 /lib/systemd/system/ 에서 관리하며, 사용자가 커스터마이징 할 때는 /etc/systemd/system/ 디렉토리를 사용합니다. 후자의 설정은 전자의 파일을 덮어쓰거나 링크되는 방식으로 우선권이 주어집니다.
Rc.local 의 Compatibility 단위 파일 구성
기존 SysVinit 에서 널리 쓰였던 /etc/rc.local 스크립트를 systemd 환경에서도 활용하기 위해서는 별도의 단위 (unit) 정의 파일이 필요합니다. 시스템 내 rc-local.service 와 유사한 설정을 수동으로 생성하거나 수정해야 정상 작동합니다.
시스템드 단위 파일은 크게 세 가지 섹션으로 구분되며, 각 부분의 역할은 다음과 같습니다.
- [Unit]: 서비스의 이름 설명, 의존성 관계, 순서 정렬
- [Service]: 실제 실행 명령어, 종료 행동, 타입 정의
- [Install]: 시동 목표 (target) 에 대한 설치 정보, 자발적 활성화 여부
기본적으로 제공되는 설정에는 [Install] 섹션이 누락되어 있을 수 있는데, 이 부분이 없으면 재부팅 후 자동 실행되지 않습니다. 따라서 다음 내용을 포함하는 완전한 설정 파일을 준비해야 합니다.
[Unit]
Description=Legacy Init Script Runner
Documentation=https://wiki.debian.org/Rc.local
ConditionPathExists=/etc/rc.local
After=multi-user.target
Wants=network-online.target
[Service]
Type=forking
ExecStart=/bin/sh -c "/etc/rc.local"
RemainAfterExit=yes
TimeoutSec=0
GuessMainPID=no
[Install]
WantedBy=multi-user.target
실행 스크립트 생성 및 권한 부여
위에서 정의한 서비스는 /etc/rc.local 파일의 존재 여부와 실행 가능 권한을 조건으로 삼습니다. 해당 파일이 없는 경우 먼저 빈 파일을 생성하고 내부에 원하는 명령어를 작성합니다.
# 스크립트 파일 생성
sudo touch /etc/rc.local
# 내용 예시: 부팅 검증 로그 기록
echo "$(date '+%Y-%m-%d %H:%M:%S') - System Initialized" | tee -a /var/log/boot-verify.log > /dev/null
작성된 파일이 셸에서 실행될 수 있도록 실행 권한을 명시해야 합니다.
sudo chmod 755 /etc/rc.local
서비스 활성화 및 적용 확인
설정 파일이 준비되었다면 이를 systemd 가 인식하도록 등록해야 합니다. 이전 방식처럼 수동으로 심볼릭 링크를 만드는 대신, systemd 가 제공하는 표준 명령어를 사용하는 것이 권장됩니다.
# 해당 서비스 파일 위치 (예시로 /etc/systemd/system 하단)
sudo cp /path/to/custom/rc-local.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable rc-local.service
systemctl enable 명령은 /etc/systemd/system/multi-user.target.wants/ 경로에 자동으로 링크를 생성하여 다음 부팅 시점에 서비스가 로드되도록 보장합니다. 시스템 재부팅을 수행한 후, 앞서 지정한 로그 파일 (/var/log/boot-verify.log) 에 기록이 남았는지 확인하면 자동 실행 설정이 성공했음을 알 수 있습니다.