리눅스

우분투 프로그램 자동 부팅 (ubuntu auto start)

녕집사 2021. 10. 31. 01:29
반응형

로봇과 같은 임베디드 환경에서는 사용자가 일일이 프로그램을 실행하지 않고 자동으로 프로그램이 부팅되기를 원할 때가 있습니다. 

이때 우분투에서는 프로그램이 부팅하면서 자동으로 켜지도록 환경설정을 할 수 있습니다.

많은 자동 부팅 프로그램 등록 방법이 있지만 제가 시도했었던 방법을 알려드리도록 하겠습니다.

 

  1. /etc/ 폴더 내에 rc.local을 생성하는 방식
  2. /etc/init.d 내에 시작 프로그램 등록 방식
  3. systemctl 명령어를 활용한 프로그램 등록 방식

3가지의 순서로 설명드리겠습니다.

 

 

  • /etc/ 폴더 내에 rc.local을 생성하는 방식

 

/etc/ 폴더 내에 rc.local을 생성하여 내부에 실행하고 싶은 프로그램을 쉘 스크립트 형식으로 작성합니다.

#!/bin/sh

/etc/test.sh
exit 0
EOF

간단하게 위와 같은 코드를 삽입하여 실행합니다. 

이때 주의할 점은 실행할 프로그램들은 실행이 가능한 상태여야 합니다.

따라서, rc.local 과 내부에 실행할 프로그램 (test.sh)의 경우

sudo chmod +x /etc/test.sh
sudo chmod +x /etc/rc.local
위와 같이 실행 권한을 설정을 하지 않으면 접근이 불가할 수 있습니다.

 

  • /etc/init.d 내에 시작 프로그램 등록 방식

 

/etc/init.d 내에 프로그램을 등록하는 방식은 앞서 수행한 방식과 비슷합니다.

앞에서 실행하고자 했던 test.sh 파일을 /etc/init.d 내에 넣어주고 다음의 명령어를 실행합니다.

sudo update-rc.d test.sh defaults  # 부트 프로그램 등록
sudo update-rc.d -f test.sh remove # 부트 프로그램 삭제

앞서 설명드린 방법들은 이전에 리눅스 배포판에서는 기본적으로 사용하는 부팅 프로그램 등록 방법이었지만 몇년 전부터의 배포판에서는 기본으로 적용하지 않는 방법들이라고 합니다.

최근 리눅스 배포판에서 권장하는 방법은 systemd를 사용하는 방법입니다.

 

  • systemctl 명령어를 활용한 프로그램 등록 방식

 

systemctl 명령어를 활용하는 방식은 /etc/systemd/system/ 내에 .service 파일을 등록하는 방법으로 사용이 가능합니다.

간단한 test.service 스크립트를 생성해 보도록 합시다.

# /etc/systemd/system/test.service
[Unit]
Description=test service program # 프로그램 설명

[Service]
Type=simple # 유닛의 타입 [simple|forking|oneshot|notify|dbus]
ExecStart=/home/$user/test.sh # 실행할 스크립트

[Install]
WantedBy=multi-user.target # 부팅 runlevel

위의 기능을 제외하고도 service로 등록할 수 있는 기능은 상당히 많습니다.

간단한 프로그램을 실행할 수 있는 수준은 위의 스크립트로도 충분합니다.

이제 등록하도록 하죠. 등록 및 해제 방법은 다음과 같습니다.

sudo systemctl enable test.service # 서비스를 실행가능 상태로 설정
sudo systemctl start test.service # 서비스를 실행
sudo systemctl status test.service # 서비스의 상태를 확인
sudo systemctl stop test.service # 서비스를 잠시 멈춤
sudo systemctl disable test.service # 서비스 등록 해제

systemctl의 자주 사용하는 명령어는 위와 같습니다.

status를 통해서 부팅하고 난 뒤 제대로 실행되는 지 확인이 가능합니다.

 

부팅 프로그램을 실행할 때 주의할 점은 부팅 시 루트의 권한으로 실행하기 때문에 기존 유저로 사용하던 환경 설정이 제대로 적용되지 않을 수 있습니다. 만약에 ~/.bashrc에서 사용하는 환경설정이 있었다면 test.service에 등록되어 있는 쉘 스크립트 내부에 ~/.bashrc의 환경설정을 적용시켜준다면 정상동작할 수 있습니다.

 

이상으로 여러 프로그램 부팅 방법을 알아봤습니다.

앞서 설명드린, rc.local 혹은 init.d 방식은 공식적인 배포판에서도 지원하지 않는 방식이므로, systemd 활용하는 것을 권장드립니다.

반응형