2019. 3. 25. 22:30ㆍstudy/centos 7 server & network
1. 서비스
: 시스템과 독자적으로 구동되어 제공하는 프로세스
ex) 웹서버(httpd), db 서버(mysqld), ftp 서버(vsftpd) 등이 있다.
: 서비스의 실행 스크립트 파일은 /usr/lib/systemd/system/서비스이름.service
centos6까지는 /etc/rc.d/init.d 디렉터리에 서비스 관련 파일들이 있었다..
> 이를 chkconfig, service 명령어를 통해 제어했다.
centos7부터는 서비스들이 대부분 unit으로 분리되었고, 서비스이름.service 파일명을 가지며,
systemctl 명령어로 제어한다.
2. systemctl
(아래 표에 대한 출처는 링크 걸어놨습니다.)
systemctl |
description |
systemctl start name.service |
starts a service |
systemctl stop name.service |
stops a service |
systemctl restart name.service |
restarts a service |
systemctl try-restart name.service |
restarts a service only if it is running |
systemctl reload name.service |
reloads configuration |
systemctl status name.service systemctl is-active name.service |
checks if a service is running |
systemctl list-units --type service -all | displays the status of all services |
* systemctl 명령어의 자세한 내용 포스팅 예정
3. *.service
ex) sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
3.1 [Unit]
- Description
: 해당 유닛에 대한 상세한 설명을 포함한다.
: systemctl status 명령을 사용했을 때 출력되는 내용이다.
- Documentation
: 해당 유닛에 대한 문서를 참조하는 url의 목록을 제공한다.
- After
: 유닛이 시작되는 순서를 정의한다.
: 이 항목에 지정된 유닛이 시작한 후에만 해당 유닛이 시작한다.
ex)
After = network.target sshd-keygen.service
: network.target과 sshd-keygen.service가 시작된 후에 sshd.service가 시작된다.
* Before 옵션은 After과 반대 기능
- Wants
: Requires 보다는 약한 의존성을 설정한다.
: 만약 Wants 항목에 있는 모든 유닛이 성공적으로 시작하지 못하더라도, 해당 유닛의 활성화에 영향을 주지 않는다.
ex)
Wants = sshd-keygen.service
: sshd-keygen.service가 시작되지 못해도 sshd.service가 시작하는데 영향을 주지 않는다.
- Requires
: 다른 유닛들에 대한 의존성을 설정한다.
: 만약 Requires 항목에 있는 유닛들이 해당 유닛과 함께 활성화된다.
: 만약 항목에 있는 유닛들이 시작하지 못하면, 해당 유닛은 시작되지 않는다.
- Conflicts
: Require과 반대
ex)
Conflicts = test.service
: sshd.service가 시작된 경우 test.service가 중지되고,
: sshd.service가 중지된 경우에는 test.service가 시작된다.
3.2 [Service]
- Type
: 유닛 시작 타입을 설정한다.
(Execstart와 관련 옵션들의 기능에 영향을 주는)
simple (default)
: 유닛이 시작할 때의 (ExecStart 명령으로 시작한) 프로세스가 서비스의 메인 프로세스
: 즉, 유닛이 시작할 때 서비스가 시작된다고 판단
forking
: fork를 하는 데몬을 위해 사용된다.
: 서비스의 메인 프로세스가 되는 자식 프로세스를 생성한다.
> 완전히 시작되면 부모 프로세스는 종료된다.
* PIDFILE = 로 pid 파일을 선언 해줘야한다.
oneshot
: simple과 비슷한 타입
: consequent 유닛을 시작하기 전에 종료된다.
dbus
: simple과 비슷한 타입
: 메인 프로세스가 D-Bus 이름을 가진 후에만, 유닛이 시작된다.
notify
: simple과 비슷한 타입
: 알림 메시지(notification message)가 보내진 후에만, 유닛이 시작된다.
* sd_notify()가 메시지를 보낸다.
idle
: simple과 비슷한 타입
: 모든 작업이 끝날 때까지 서비스의 실행이 지연된다.
: 쉘의 출력과 상태 결과가 섞이지 않는다. (아직 무슨 말인지 모르겠다..)
+ consequent unit이 무엇인지 더 알아보기
- ExecStart
: (유닛) 실행 명령을 지정한다.
: Type = oneshot의 경우, 여러개의 사용자 정의 명령을 지정할 수 있다. (순차적으로 실행)
* ExecStartPre : ExecStart 명령 전에 실행되는 사용자 정의 명령
* ExecStartPost : ExecStart 명령 후에 실행되는 사용자 정의 명령
- ExecStop
: 중지 명령을 지정한다.
- ExecReload
: reload을 수행할 명령을 지정한다.
- Restart
: 프로세스가 종료된 후에 서비스를 재시작한다.
* systemctl 명령에 의해 종료된 경우를 제외하고
- RemainAfterExit ( 기본값 = False )
: True의 경우, 모든 프로세스가 종료되도, 서비스는 계속 실행중이라고 여겨진다.
: Type = oneshot인 경우, 특히 유용하다.
3.3 [Install]
- Alias
: 해당 유닛의 추가적인 이름(별칭)을 지정한다.
대부분의 systemctl 명령은 이 별칭을 사용할 수 있다.
(systemctl enable을 제외하고)
- RequireBy
: 해당 유닛에 대해 의존성을 가진 유닛들을 지정한다.
: 항목에 있는 유닛들은 "Require= " 옵션을 가진다.
- WantedBy
: 해당 유닛에 대해 약한 의존성을 가진 유닛들을 지정한다.
: 항목에 있는 유닛들은 "Wants= " 옵션을 가진다.
- Also
: 같이 등록하거나 해제할 유닛들을 지정한다.
4. unit 파일 만들기
case A 사용자 정의 데몬 만들기
case B 이미 존재하는 서비스의 또 다른 instance 만들기
case C 이미 존재하는 서비스 수정
case A 사용자 정의 데몬 만들기
1. 서비스 실행파일을 준비한다.
: 사용자가 만든 스크립트 or 소프트웨어 제공자가 제공한 실행파일
1.1 필요한 경우, 주 프로세스에 대한 일정한 pid를 가지고 있는 pid 파일을 준비한다.
1.2 또한, 쉘 변수를 저장하기 위한 환경파일(environment file)을 포함시킬 수 있다.
* 스크립트가 실행가능하도록 한다. > chmod a+x
2. 유닛 파일을 만든다.
: /etc/systemd/system/ 디렉터리 안에
(올바른 파일 허가권을 갖도록 한다.)
* root 계정으로 파일을 만든다.
[root@localhost] # vim /etc/systemd/system/(name).service
[root@localhost] # chmod 664 /etc/system/system/(name).service
3. 서비스 구성 옵션을 추가한다. [unit], [service], [install]
: 3번 항목 참고
4. 새로운 서비스를 등록한다.
[root@localhost] # systemctl daemon-reload
[root@localhost] # systemctl start (name).service
* 새로운 유닛 파일을 만들거나 기존의 파일을 수정한 후에는 항상 systemctl daemon-reload 명령을 실행해야한다.
> systemctl start or enable 명령어가 systemd의 상태와 실제 서비스 유닛 파일 사이의 불일치로 실패할 수 있다.
[출처] :
'study > centos 7 server & network' 카테고리의 다른 글
[centos] 쿼터 (0) | 2019.03.31 |
---|---|
[centos] 하드디스크 (0) | 2019.03.26 |
[centos] 프로세스 (0) | 2019.03.24 |
[centos] 파이프, 필터, 리다이렉션 (0) | 2019.03.24 |
[centos] 네트워크 관련 명령어, selinux (0) | 2019.03.24 |