린아저씨의 잡학사전

리눅스를 사용하다 보면 서버가 켜질 때, 즉 부팅이 될 때 자동으로 실행시켜야할 명령어나 스크립트가 생기기 마련입니다. 저의 경우에는 /var/run 경로에 서비스가 이용하는 디렉터리를 만들어 놓았는데, /var/run 경로는 서버가 재부팅되면 제가 임의로 생성해 놓은 디렉터리는 삭제 됩니다. 따라서 재부팅 후에도 바로 다시 디렉터리를 생성해 주도록 명령어 등록이 필요합니다.

 

윈도우에서는 간단히 시작 프로그램으로 등록해주면 윈도우가 켜지면서 자동으로 실행시켜줍니다. 그렇다면 리눅스에서는 어떻게 해야할지 알아보겠습니다. 저는 주로 Ubuntu를 사용하기 때문에 Ubuntu18.04 버전을 기준으로 설명 드리겠습니다.

 

 

 

1. 실행할 명령어 또는 스크립트 확인

우선은 실행할 명령어 또는 스크립트를 확인해야 합니다.

특히 권한을 꼭 확인해주어야 합니다. 제대로 명령어와 스크립트를 등록해놓고 막상 그 파일에 대한 권한이 없어서 실행시키지 못하는 경우 종종 발생합니다. 저는 위에서 /var/run 경로에 디렉터리가 필요하다고 언급을 드렸으니, 동일하게 /var/run 경로에 service_dir 이라는 디렉터리를 생성하는 명령어를 등록하겠습니다.

 

mkdir /var/run/service_dir

 

2. rc.local 파일 생성 및 편집

위에서 실행할 명령어 또는 스크립트를 확인하였다면, /etc/rc.local 파일을 sudo 권한으로 열어 줍니다. 

sudo vi /etc/rc.local

Ubuntu 18.04 rc.local 파일을 열어봤을 때 기존에 아무 설정을 해주지 않았다면 그냥 빈파일 입니다. 때문에 가장 윗줄에 #!/bin/bash를 입력해서 bash 파일임을 알려주고 아래에 원하는 명령어 또는 스크립트를 실행하는 명령어를 작성해 줍니다.

저는 다음과 같이 mkdir /var/run/service_dir 명령어를 입력하여 재부팅시 /var/run 경로에 service_dir 디렉터리를 생성해주도록 하였습니다. 이제 :wq 입력하여 저장하고 나옵니다.

rc.local 파일 생성 및 편집

 

3. rc.local 서비스 활성화

Ubuntu18.04 버전부터는 rc.local 파일이 기본적으로 비활성화 되어 먼저 활성화 작업을 해주어야 합니다. 우선 rc.local 파일에 실행 권한이 없기 때문에 실행 권한을 먼저 추가해 줍니다.

sudo chmod +x /etc/rc.local

그리고 systemd에서 rc-local.service 파일을 수정하여 런레벨에 대한 설정을 추가해 줍니다. WantedBy=multi-user.target을 아래와 같이 파일 맨 아래에 추가해 줍니다.

sudo vi /lib/systemd/system/rc-local.service



#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target

rc-local.service 파일

이제 rc-local 서비스 역시 재부팅시에도 자동 실행되게 등록해주고 실행시켜 줍니다.

sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service

아래와 같이 최종으로 status 명령어로 rc-local.service가 정상적으로 실행되는지 확인합니다.

rc-local.service 실행 및 확인

 

4. 스크립트 자동 실행 확인

재부팅 후 의도했던 /var/run 경로에 service_dir 디렉터리가 자동으로 생성됨을 확인하였습니다.

스크립트 자동실행 확인

Ubuntu 18.04 버전부터는 rc.local 파일을 작성하고 활성화 해주는 약간의 번거로움이 있었지만, 10분이면 모두 등록이 가능하실 것으로 보입니다. 

 

자 이렇게 재부팅시 스크립트 또는 명령어를 자동으로 실행하는 방법에 대해서 알아보았습니다. 궁금점이나 수정할 부분이 보이신다면 언제든 댓글 부탁드리겠습니다! 끝.

공유하기

facebook twitter kakaoTalk kakaostory naver band