간단 설명
service와 systemctl을 이해하기 위해서, 데몬이라는 개념에 대해서 알고 있어야 한다. 데몬이란 사용자가 직접적으로 제어하지 않고, 백그라운드에서 여러 작업을 하는 프로그램을 말한다. 일반적으로 데몬 프로세스는 systemd, syslogd 처럼 프로세스 이름 마지막에 d가 붙는다.
Linux는 OS가 부팅되면서 여러가지 데몬들이 실행된다. 부팅과 함께 실행되는 데몬은 네트워크 요청을 처리하는 데몬, 하드웨어 동작을 처리하는 데몬 등, 시스템단에서 필요한 작업을 백그라운드로 처리하는 데몬들이다. 이러한 데몬들을 Linux에서는 service 파일로 설정하여 실행하고 있으며, systemd라는 프로세스가 관리하고 있다.
systemd는 1번 PID를 갖는 프로세스로 프로세스 트리에서 가장 상위의 프로세스이며 모든 프로세스의 직간접 부모인 데몬이다. 즉 OS부팅시 systemd 프로세스가 가장 먼저 실행되어서, OS에 필요한 여러 데몬들을 init해주는 역할을 하고 있다.
따라서 Service는 시스템 데몬 및 사용자 정의 데몬을 의미하며, systemctl은 service(데몬)들을 관리하는 명령어 이다.
Service
Linux OS가 부팅되었을 때, 생성되면서 종료될 때까지 실행되는 Process및 설정 파일을 service라고 한다.
Service 생성
Service는 /etc/systemd/system 경로에 존재한다. 이 경로에 있는 service 들은 systemd에 의해 관리되고 있는 service라는 뜻이다.
vim /etc/systemd/system/test.service
Service 파일 속성
Service파일은 [Unit], [Service], [Install]의 섹션으로 구성되어 있다.
전부 다 알아보긴 힘드니까 필요한거 몇 개만 알아보고, 조금씩 채워나가 보자!
[Unit]
Unit | |
Description | 해당 Service 유닛에 대한 설명 |
Requires | - 상위 의존성을 구성한다. - 이 목록에 명시된 유닛이 정상적으로 동작할 경우에만 이 유닛을 시작한다. |
RequiresOverridable | - Requires와 유사하지만, 상위 의존성 유닛 구동에 실패하더라도 이를 무시하고 유닛을 시작한다. |
Requisite | - Requires와 유사함 - 상위 의존성 유닛이 시작되지 않으면, 바로 실패를 반환 |
RequisiteOverridable | |
Wants | - Requires의 완화된 버전 - 목록에 포함엔 유닛이 시작되지 않아도, 시작된다. |
BindsTo | |
PartOf | |
Conflicts | - 배타적 관계를 설정한다. - 만일 '유닛1' 의 "Conflicts=" 설정이 '유닛2' 로 되어 있다면 '유닛1'이 시작된 경우 '유닛2'가 중지되고, '유닛1'이 중지된 경우 '유닛2'가 시작한다. 이 옵션은 "After=" 와 "Before=" 옵션과는 독립적으로 작동한다. |
Before | - 유닛 시작 전 관계를 설정한다. - Requires 설정과는 독립적이다. - 이 옵션에 나열된 유닛이 시작되기 전에 이 유닛이 시작된다. |
After | - 유닛 시작 후 관계를 설정한다. - Requires 설정과는 독립적이다. - 이 옵션에 나열된 유닛이 시작하고나서 이 유닛이 시작된다. |
OnFailure | - 해당 유닛이 실패상태가 되면 수행할 유닛 목록을 지정한다. |
PropagatesReloadTo | |
ReloadPropagatedFrom | |
RequiresMountsFor | |
OnFailuresolate=[yes|no] | |
IgnoreOnIsolate=[yes|no] |
[Service]
Service | |
Type | 유닛의 타입을 선언한다. simple (default) - 유닛이 시작된 경우 systemd는 즉시 유닛의 시작이 완료되었다고 판단한다. - 다른 유닛과 통신하기 위해 소켓을 사용하는 경우 이 타입을 사용할 수 없다. forking - 자식 프로세스 생성이 완료되어야 systemd가 유닛의 시작이 완료되었다고 판단한다. - 부모 프로세스를 추적할 수 있도록 PIDFile 옵션을 설정해주어야 한다. oneshot - simple과 유사하지만 단일 작업을 수행하는데 적합한 타입이다. - 실행 후 해당 실행이 종료되더라도 RemainAfterExiet=yes 설정을 통해 유닛을 활성화 상태로 간주할 수 있다. notify - simple과 동일하지만, 유닛이 시작되면 systemd에 시그널을 보낸다. - 시그널의 내용은 libsystemd-daemon.so에 선언되어있다. dbus - D-Bus에 지정된 BusName이 준비될 때까지 대기한다. - D-Bus가 준비된 후에 유닛이 시작되었다고 간주한다. |
RemainAfterExit [yes|no] | |
GuessMainPID [yes|no] | |
PIDFile | |
BusName | |
Environment | - 유닛에서 사용할 환경변수를 선언한다. - 반드시 Exec 옵션보다 상단에 위치해야 한다. |
EnvironmentFile | |
ExecStart | - 시작 명령을 정의한다. - 실행 멸령어는 반드시 절대 경로 또는 변수로 지정 - 다중 명령어를 지원한다 ExecStart="command1" ExecStart="command2" ExecStart="command3" or ExecStart="command1; command2; command3" |
ExecStop | - 중지 명령을 정의한다. - 사용법은 ExecStart와 같다. - 중지 방식은 KillMode옵션에서 설정한다. |
KillMode | - 중지 방법에 대해서 설정하는 옵션 control-group (default) - 해당 유닛의 그룹까지 모두 중지시킨다. process - 해당 유닛만 중지 시킨다. none - 아무 액션을 취하지 않는다. |
ExexReload | |
ExecStartPre | |
ExecStartPost | |
ExecStopPre | |
ExecStopPost | |
RestartSec | - 재시작 명령을 수행할때, 중지 이후 다시 시작하는데 대기하는 시간을 설정한다. - 기본값은 100ms - 각각 "min", "s", "ms"단위로 설정된다. - Restart 옵션이 있는 경우에만 적용된다. |
TimeoutStartSec | |
TimeoutStopSec | |
TimeoutSec | |
WatchdogSec | |
Restart | [no | on-success | on-failure | on-watchdog | on-abort | always ] no(기본값) on-success on-failure on-abort always |
SuccessExitStatus | |
RestartPreventExitStatus | |
PermissionsStartOnly | |
User | |
Group | |
RootDirectoryStartOnly | |
RootDirectory | |
WorkingDirectory | - 유닛의 작업 디렉토리를 지정한다. - 별도의 지정이 없으면 root("/") 디렉토리를 사용한다. |
NonBlocking | |
NotifyAccess | |
Sockets | |
StartLiitInterval | |
StartLimitBurst | |
StartLimitAction | |
Nice | |
OOMScoreAdjust | |
UMast | |
SyslogFacility | |
SyslogLevel | |
TCPWrapName | |
PAMName |
[Install]
Install | |
Alias | - 유닛의 별칭을 지정한다 - systemctl enable 명령어에 별칭을 사용할 수 있다. - Alias는 유닛 파일의 확장자를 가지고 있어야 한다. (.service, .socket, .mount, .swap 등) |
WantedBy | - systemctl enable 명령어로 유닛을 등록할 때 필요한 유닛을 지정한다. - Unit 섹션의 Wants와 관련이 있다. |
RequiredBy | - systemctl enable 명령어로 유닛을 등록할 때 필요한 유닛을 지정한다. - Unit 섹션의 Requires와 관련이 있다. |
Also | systemctl enable/disable 명령어로 유닛을 등록하거나 해제할 때 다른 유닛도 함께 등록/해제 할 수 있게 만드는 설정이다. |
SystemCtl
서비스 유닛 (.service)을 관리 및 제어하는 명령어 이다. CentOS7 버전 부터 사용하는 명령어이며, 이전버전에서는 Service 명령어로 사용이 가능하다.
명령 | service | systemctl |
시작 | service 서비스 이름 start | systemctl start 서비스이름.service (.service 생략 가능) |
종료 | service 서비스 이름 stop | systemctl stop 서비스 이름 |
재시작 | service 서비스 이름 restart | systemctl restart 서비스 이름 |
재시작 (시작된 서비스) | service 서비스 이름 condrestart | systemctl try-restart 서비스 이름 |
설정 Reload | service 서비스 이름 reload | systemctl reload 서비스 이름 |
상태 확인 | service 서비스 이름 status | systemctl status 서비스 이름 systemctl is-active 서비스 이름 |
자동시작 활성화 (부팅시) | x (chkconfig 명령어 사용해야 함) | systemctl enable 서비스 이름 |
자동시작 비활성화 (부팅시) | x | systemctl disable 서비스 이름 |
'Linux' 카테고리의 다른 글
systemd란 (0) | 2020.12.21 |
---|---|
심볼릭 링크 (symbolic link) (0) | 2020.12.20 |