Linux 는 OS 가 부팅되면서 여러가지 데몬들이 실행된다.
데몬이란 사용자가 직접적으로 제어하지 않고, 백그라운드에서 여러 작업을 하는 프로그램이며 이러한 프로그램들은 사용자의 직접적인 상호작용 없이도 시스템의 핵심 기능을 지원하거나 다른프로그램에 서비스를 제공합니다.
systemctl 이란?
systemctl 은 systemd 시스템과 서비스 매니저의 기본 명령줄 도구로 이 도구를 사용하여 시스템의 상태를 검사하고, 시스템 서비스를 관리하고, 시스템 서비를 관리하고 , 서비스를 시작 / 중지 / 재시작하며 , 서비스를 활성화 / 비활성화 할수 있습니다.
Linux 에는 autoStart 가 있다
autoStart는 시스템이 부팅될 때 필요한 서비스나 애플리케이션을 자동으로 실행 할 수 있게 한다.
autoStart 가 있는데 systemctl 에 서비스를 만들고 실행하는 이유는 뭘까?
autoStart 는 부팅될때 단 한번만 실행된다.
systemctl 은 사용자가 서비스를 중지하지않으면 갑자기 서비스가 종료되었을때 이를 확인하고 자동으로 다시 서비스를 실행한다.
부팅될때 한번만 실행해도 되는 작업은 autoStart 에 작성하고
그렇지 않고 계속 실행되어야하는 서비스인 경우 systemctl 에 service 를 작성하고 활성화 시킨 후 실행하는게 맞다.
systemctl 에 service 를 작성하는 방법에 대해서 기록하려고한다.
먼저 파일을 만들어야한다.
1. vim 또는 nano 를 설치해야한다
sudo apt update
sudo apt install vim
sudo apt install nano
sudo nano /etc/systemd/system/['만들고자하는 서비스명'].service
만약에 내가 실행하려고하는 서비스의 이름이 windows 라면 아래와 같이 입력하면된다.
sudo nano /etc/systemd/system/windows.service
[Unit]
Description=Windows Service Start
After=network.target
[Service]
ExecStart=/home/[사용자 이름]/windows
Restart=always
RestartSec=10
WorkingDirectory=/home/[사용자 이름]
Environment='DISPLAY=:0'
[Install]
WantedBy=multi-user.target
[Unit] 섹션 : 서비스의 유닛 메타데이터와 종속성을 지정한다.
Description : 서비스에 대한 간략한 설명이다.
After : 해당 서비스가 시작되기 전에 활성화 되어야 하는 서비스나 유닛을 지정한다.
(network.target 이라 적었는데 이는 네트워크를 사용하는 경우 서비스가 실행되기 전에 네트워크를 먼저 설정하도록 한다는 뜻으로 인터넷이 연결된 후에 서비스를 실행하겠다는 내용이다.
[Service] 섹션 : 실행 파일과 관련된 옵션을 지정한다.
ExecStart : 서비스를 시작할 때 실행되는 명령어 실행파일을 지정한다.
Restart : 서비스가 실패하거나 종료된 경우 어떻게 할지에 대한 설정으로 always 로 설정하면 서비스가 종료되면 언제나 다시 시작된다는 뜻이다.
RestartSec : 10으로 설정한것은 서비스가 종료되면 10초 뒤에 다시 시작하겠다는 뜻이다.
WorkDirectory : 서비스가 실행되는 작업 디렉토리를 지정한다. 지정하지 않으면 root("/") 디렉토리를 사용한다.
Environment : 서비스가 실행될 때 적용되는 환경 변수를 설정한다.
WantedBy : multi-user.target는 여러 사용자가 시스템에 로그인하고 대화형(non-graphical) 멀티유저 모드에서 서비스를 사용할 수 있게 하는 대상 유닛입니다.
sudo systemctl enable windows.service
sudo systemctl start windows.service
sudo systemctl status windows.service
이렇게 한다음 재부팅했을때 잘 실행된다면 끝이다.
잘 실행되었는지 확인하는 방법은 아래의 명령어를 입력하면된다.
sudo systemctl status windows.service