Systemd

CentOSCentOS 7

systemd とは?

 状態:-  閲覧数:881  投稿日:2018-05-27  更新日:2018-06-07

Linux の起動処理やシステム管理を行う仕組み


Lennart PoetteringKay Sievers を中心に開発された、Linux の起動処理やシステム管理を行う仕組みのこと
・Red Hat社のLennart Poetteringが開発した

CentOSにおけるシステムとサービスの管理
・CentOS 7から、「Systemd」というサービスマネージャーが採用された
・「Systemd」は、Cgroupsを利用して、Unitごとに関連するプロセスを分類する

作成例


Go
Go × Web

Unitの基本操作

 閲覧数:120 投稿日:2018-05-27 更新日:2018-06-07 

Unitの自動起動を有効化


実際には、「WantedBy=」で指定されたUnitへの依存関係を設定する
# systemctl enable <Unit名>

Unitの自動起動を無効化


実際には、「WantedBy=」で指定されたUnitへの依存関係を削除する
# systemctl disable <Unit名>

Unitの実行状態を表示


関連するデーモンプロセスを表示
・関連する直近のログを表示
# systemctl status <Unit名>

Unit設定ファイルを変更した時に、変更内容をsystemdに認識させる


# systemctl daemon-reload





Cgroupsによる分類をツリー表示 / グループごとのリソース使用状況をリアルタイムで表示

 閲覧数:138 投稿日:2018-06-07 更新日:2018-06-09 

Cgroupsによる分類をツリー表示


$ systemd-cgls
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─user.slice
│ └─user-1000.slice
│   ├─session-10582.scope
│   │ ├─15842 sshd: ★★ [priv
│   │ ├─15844 sshd: ★★@pts/
│   │ ├─15845 -bash
│   │ ├─15884 systemd-cgls
│   │ └─15885 systemd-cgls
│   ├─session-10557.scope
│   │ ├─15417 sshd: ★★ [priv
│   │ ├─15419 sshd: ★★@nott
│   │ └─15420 /usr/libexec/openssh/sftp-server
│   └─session-10497.scope
│     ├─14455 sshd: ★★ [priv
│     ├─14457 sshd: ★★@nott
│     └─14458 /usr/libexec/openssh/sftp-server
└─system.slice
 ├─uwsgi.service
 │ ├─10689 /usr/bin/uwsgi --emperor /var/www/◆◆/python-demo.w4c.work/emperor --uid nginx --gid nginx
--
 │ ├─10690 /usr/bin/uwsgi --ini emperor.ini
 │ ├─10691 /usr/bin/uwsgi --ini emperor.ini
 │ ├─10692 /usr/bin/uwsgi --ini uwsgi.ini
 │ ├─10693 /usr/bin/uwsgi --ini b.ini
 │ ├─10694 /usr/bin/uwsgi --ini index.ini
 │ ├─10695 /usr/bin/uwsgi --ini index2.ini
 │ ├─10696 /usr/bin/uwsgi --ini a_index2.ini
 │ ├─10697 /usr/bin/uwsgi --ini index3.ini
 │ ├─10698 /usr/bin/uwsgi --ini bottle1.ini
 │ ├─10699 /usr/bin/uwsgi --ini bottle2.ini
 │ ├─10700 /usr/bin/uwsgi --ini bottle2_1.ini
 │ ├─10701 /usr/bin/uwsgi --ini bottle2_3.ini
 │ ├─10702 /usr/bin/uwsgi --ini bottle3.ini
 │ ├─10703 /usr/bin/uwsgi --ini bottle4.ini
 │ ├─10704 /usr/bin/uwsgi --ini bottle5.ini
 │ ├─10705 /usr/bin/uwsgi --ini bottle6.ini
 │ ├─10706 /usr/bin/uwsgi --ini bottle7.ini
lines 1-37...skipping...
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─user.slice
│ └─user-1000.slice
│   ├─session-10582.scope
│   │ ├─15842 sshd: ★★ [priv
│   │ ├─15844 sshd: ★★@pts/
│   │ ├─15845 -bash
│   │ ├─15884 systemd-cgls
│   │ └─15885 systemd-cgls
│   ├─session-10557.scope
│   │ ├─15417 sshd: ★★ [priv
│   │ ├─15419 sshd: ★★@nott
│   │ └─15420 /usr/libexec/openssh/sftp-server
│   └─session-10497.scope
│     ├─14455 sshd: ★★ [priv
│     ├─14457 sshd: ★★@nott
│     └─14458 /usr/libexec/openssh/sftp-server
└─system.slice
 ├─uwsgi.service
 │ ├─10689 /usr/bin/uwsgi --emperor /var/www/◆◆/python-demo.w4c.work/emperor --uid nginx --gid nginx --enable-threads
 │ ├─10690 /usr/bin/uwsgi --ini emperor.ini
 │ ├─10691 /usr/bin/uwsgi --ini emperor.ini
 │ ├─10692 /usr/bin/uwsgi --ini uwsgi.ini
 │ ├─10693 /usr/bin/uwsgi --ini b.ini
 │ ├─10694 /usr/bin/uwsgi --ini index.ini
 │ ├─10695 /usr/bin/uwsgi --ini index2.ini
 │ ├─10696 /usr/bin/uwsgi --ini a_index2.ini
 │ ├─10697 /usr/bin/uwsgi --ini index3.ini
 │ ├─10698 /usr/bin/uwsgi --ini bottle1.ini
 │ ├─10699 /usr/bin/uwsgi --ini bottle2.ini
 │ ├─10700 /usr/bin/uwsgi --ini bottle2_1.ini
 │ ├─10701 /usr/bin/uwsgi --ini bottle2_3.ini
 │ ├─10702 /usr/bin/uwsgi --ini bottle3.ini
 │ ├─10703 /usr/bin/uwsgi --ini bottle4.ini
 │ ├─10704 /usr/bin/uwsgi --ini bottle5.ini
 │ ├─10705 /usr/bin/uwsgi --ini bottle6.ini
 │ ├─10706 /usr/bin/uwsgi --ini bottle7.ini
 │ ├─10707 /usr/bin/uwsgi --ini bottle8.ini
 │ ├─10708 /usr/bin/uwsgi --ini bottle9.ini
 │ ├─10709 /usr/bin/uwsgi --ini math1.ini
 │ ├─10710 /usr/bin/uwsgi --ini bottle111.ini
 │ ├─10711 /usr/bin/uwsgi --ini crawling_greet_2_3.ini
 │ ├─10712 /usr/bin/uwsgi --ini crawling_if_2_3.ini
 │ ├─10713 /usr/bin/uwsgi --ini crawling_forwhile_2_3.ini
 │ ├─10714 /usr/bin/uwsgi --ini crawling_trywith_2_3.ini
 │ ├─10715 /usr/bin/uwsgi --ini crawling_def_2_3.ini
 │ ├─10716 /usr/bin/uwsgi --ini index100.ini
 │ ├─10717 /usr/bin/uwsgi --ini s1.ini
 │ ├─10718 /usr/bin/uwsgi --ini uwsgi.ini
 │ ├─10719 /usr/bin/uwsgi --ini uwsgi.ini
 │ ├─10720 /usr/bin/uwsgi --ini uwsgi.ini
 │ ├─10721 /usr/bin/uwsgi --ini uwsgi.ini
 │ ├─10722 /usr/bin/uwsgi --ini a_index2.ini
 │ ├─10723 /usr/bin/uwsgi --ini a_index2.ini
 │ ├─10724 /usr/bin/uwsgi --ini a_index2.ini
 │ ├─10725 /usr/bin/uwsgi --ini a_index2.ini
 │ ├─10730 /usr/bin/uwsgi --ini index3.ini
 │ ├─10731 /usr/bin/uwsgi --ini index3.ini
 │ ├─10732 /usr/bin/uwsgi --ini index3.ini
 │ ├─10733 /usr/bin/uwsgi --ini index3.ini
 │ ├─10734 /usr/bin/uwsgi --ini b.ini
 │ ├─10735 /usr/bin/uwsgi --ini b.ini
 │ ├─10736 /usr/bin/uwsgi --ini b.ini
 │ ├─10737 /usr/bin/uwsgi --ini b.ini
 │ ├─10738 /usr/bin/uwsgi --ini index2.ini
 │ ├─10739 /usr/bin/uwsgi --ini index2.ini
 │ ├─10740 /usr/bin/uwsgi --ini index2.ini
 │ ├─10741 /usr/bin/uwsgi --ini index2.ini
 │ ├─10766 /usr/bin/uwsgi --ini index100.ini
 │ ├─10767 /usr/bin/uwsgi --ini index100.ini
 │ ├─10768 /usr/bin/uwsgi --ini index100.ini
 │ ├─10769 /usr/bin/uwsgi --ini index100.ini
 │ ├─10770 /usr/bin/uwsgi --ini bottle9.ini
 │ ├─10775 /usr/bin/uwsgi --ini bottle2.ini
 │ ├─10776 /usr/bin/uwsgi --ini bottle2.ini
 │ ├─10777 /usr/bin/uwsgi --ini bottle2.ini
 │ ├─10778 /usr/bin/uwsgi --ini bottle2.ini
 │ ├─10779 /usr/bin/uwsgi --ini bottle7.ini
 │ ├─10780 /usr/bin/uwsgi --ini bottle111.ini
 │ ├─10781 /usr/bin/uwsgi --ini bottle111.ini
 │ ├─10782 /usr/bin/uwsgi --ini bottle111.ini
 │ ├─10783 /usr/bin/uwsgi --ini bottle111.ini
 │ ├─10784 /usr/bin/uwsgi --ini bottle2_3.ini
 │ ├─10785 /usr/bin/uwsgi --ini bottle2_3.ini
 │ ├─10786 /usr/bin/uwsgi --ini bottle2_3.ini
 │ ├─10787 /usr/bin/uwsgi --ini bottle2_3.ini
 │ ├─10788 /usr/bin/uwsgi --ini crawling_trywith_2_3.ini
 │ ├─10789 /usr/bin/uwsgi --ini bottle4.ini
 │ ├─10790 /usr/bin/uwsgi --ini bottle4.ini
 │ ├─10791 /usr/bin/uwsgi --ini bottle4.ini
 │ ├─10792 /usr/bin/uwsgi --ini bottle4.ini
 │ ├─10799 /usr/bin/uwsgi --ini s1.ini
 │ ├─10801 /usr/bin/uwsgi --ini s1.ini
 │ ├─10802 /usr/bin/uwsgi --ini s1.ini
 │ ├─10804 /usr/bin/uwsgi --ini s1.ini
 │ ├─10806 /usr/bin/uwsgi --ini crawling_if_2_3.ini
 │ ├─10818 /usr/bin/uwsgi --ini math1.ini
 │ ├─10819 /usr/bin/uwsgi --ini math1.ini
 │ ├─10820 /usr/bin/uwsgi --ini math1.ini
 │ ├─10821 /usr/bin/uwsgi --ini math1.ini
 │ ├─10824 /usr/bin/uwsgi --ini crawling_greet_2_3.ini
 │ ├─10827 /usr/bin/uwsgi --ini bottle1.ini
 │ ├─10828 /usr/bin/uwsgi --ini bottle1.ini
 │ ├─10829 /usr/bin/uwsgi --ini bottle1.ini
 │ ├─10830 /usr/bin/uwsgi --ini bottle1.ini
 │ ├─10831 /usr/bin/uwsgi --ini bottle2_1.ini
 │ ├─10832 /usr/bin/uwsgi --ini bottle2_1.ini
 │ ├─10833 /usr/bin/uwsgi --ini bottle2_1.ini
 │ ├─10834 /usr/bin/uwsgi --ini bottle2_1.ini
 │ ├─10835 /usr/bin/uwsgi --ini crawling_forwhile_2_3.ini
 │ ├─10841 /usr/bin/uwsgi --ini bottle8.ini
 │ ├─10842 /usr/bin/uwsgi --ini bottle3.ini
 │ ├─10843 /usr/bin/uwsgi --ini bottle3.ini
 │ ├─10844 /usr/bin/uwsgi --ini bottle3.ini
 │ ├─10845 /usr/bin/uwsgi --ini bottle5.ini
 │ ├─10851 /usr/bin/uwsgi --ini crawling_def_2_3.ini
 │ ├─10853 /usr/bin/uwsgi --ini bottle6.ini
 │ ├─10854 /usr/bin/uwsgi --ini bottle3.ini
 │ ├─10857 /usr/bin/uwsgi --ini index.ini
 │ ├─10858 /usr/bin/uwsgi --ini index.ini
 │ ├─10859 /usr/bin/uwsgi --ini index.ini
 │ └─10860 /usr/bin/uwsgi --ini index.ini
 ├─nginx.service
 │ ├─32176 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.con
 │ ├─32177 nginx: worker process                  
 │ └─32178 nginx: worker process                  
 ├─goa3.service
 │ ├─15189 ./a1
 │ ├─15190 ./a2
 │ └─15191 ./a3
 ├─goweb.service
 │ ├─2955 /bin/bash /usr/bin/run-parts /opt/go
 │ ├─2959 /opt/go/hoge1
 │ └─2960 awk -v progname=/opt/go/hoge1 progname {        print progname ":\n"        progname="";           }           { print; }
 ├─sshd.service
 │ └─1167 /usr/sbin/sshd -D
 ├─mysqld.service
 │ └─1244 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
 ├─fail2ban.service
 │ └─1206 /usr/bin/python2 -s /usr/bin/fail2ban-server -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid -x -b
 ├─php-fpm.service
 │ ├─ 1164 php-fpm: master process (/etc/php-fpm.conf
 │ ├─ 2757 php-fpm: pool www              
 │ ├─ 2758 php-fpm: pool www              
 │ ├─ 5511 php-fpm: pool www              
 │ ├─ 6537 php-fpm: pool www              
 │ ├─ 6538 php-fpm: pool www              
 │ ├─ 6539 php-fpm: pool www              
 │ ├─ 6540 php-fpm: pool www              
 │ ├─ 6541 php-fpm: pool www              
 │ ├─ 6542 php-fpm: pool www              
 │ ├─ 6543 php-fpm: pool www              
 │ ├─ 6544 php-fpm: pool www              
 │ ├─ 6545 php-fpm: pool www              
 │ ├─ 6546 php-fpm: pool www              
 │ ├─ 6547 php-fpm: pool www              
 │ ├─ 6548 php-fpm: pool www              
 │ ├─ 8864 php-fpm: pool www              
 │ ├─11377 php-fpm: pool www              
 │ ├─11378 php-fpm: pool www              
 │ ├─11843 php-fpm: pool www              
 │ ├─11844 php-fpm: pool www              
 │ ├─11845 php-fpm: pool www              


グループごとのリソース使用状況をリアルタイムで表示


$ systemd-cgtop
Path                                                                                                                  Tasks   %CPU   Memory  Input/s Output/s

/                                                                                                                       252    0.6   594.3M        -        -
/system.slice/NetworkManager.service                                                                                      1      -        -        -        -
/system.slice/abrt-oops.service                                                                                           1      -        -        -        -
/system.slice/abrtd.service                                                                                               1      -        -        -        -
/system.slice/atd.service                                                                                                 1      -        -        -        -
/system.slice/auditd.service                                                                                              1      -        -        -        -
/system.slice/chronyd.service                                                                                             1      -        -        -        -
/system.slice/crond.service                                                                                               1      -        -        -        -
/system.slice/dbus.service                                                                                                2      -        -        -        -
/system.slice/fail2ban.service                                                                                            1      -        -        -        -
/system.slice/firewalld.service                                                                                           1      -        -        -        -
/system.slice/goa3.service                                                                                                3      -        -        -        -
/system.slice/goweb.service                                                                                               3      -        -        -        -
/system.slice/irqbalance.service                                                                                          1      -        -        -        -
/system.slice/libstoragemgmt.service                                                                                      1      -        -        -        -
/system.slice/lvm2-lvmetad.service                                                                                        1      -        -        -        -
/system.slice/mysqld.service                                                                                              1      -        -        -        -
/system.slice/nginx.service                                                                                               3      -        -        -        -
/system.slice/php-fpm.service                                                                                            36      -        -        -        -
/system.slice/polkit.service                                                                                              1      -        -        -        -
/system.slice/rsyslog.service                                                                                             1      -        -        -        -
/system.slice/smartd.service                                                                                              1      -        -        -        -
/system.slice/sshd.service                                                                                                1      -        -        -        -
/system.slice/system-getty.slice/getty@tty1.service                                                                       1      -        -        -        -
/system.slice/system-serial\x2dgetty.slice/serial-getty@ttyS0.service                                                     1      -        -        -        -
/system.slice/systemd-journald.service                                                                                    1      -        -        -        -
/system.slice/systemd-logind.service                                                                                      1      -        -        -        -
/system.slice/systemd-udevd.service                                                                                       1      -        -        -        -
/system.slice/tuned.service                                                                                               1      -        -        -        -
/system.slice/uwsgi.service                                                                                             102      -        -        -        -
/system.slice/wpa_supplicant.service                                                                                      1      -        -        -        -
/user.slice/user-1000.slice/session-10775.scope                                                                           3      -        -        -        -
/user.slice/user-1000.slice/session-10811.scope                                                                           4      -        -        -        -





Unit設定ファイル / Unitセクションの主要オプション

 閲覧数:112 投稿日:2018-06-09 更新日:2018-08-26 

Unit設定ファイル


[Unit]、[Install]などのセクションに分かれる

[Unit]
・Unitの依存関係、順序関係などUnitのタイプに依存しない設定を記載

[Install]
・「systemctl enable/disable」コマンドに関連する設定を記載

 [Service]
・serviceタイプに固有の設定項目を記載

・その他にも、各タイプに固有のセクションがある

Unitセクションの主要オプション


オプションに複数項目を記載する際
・スペース区切りにするか、もしくは、同じオプションを複数回に分けて記載

Requires
・前提Unitが起動に失敗すると、このUnitの起動を取り止める

Wants
・前提Unitが起動に失敗しても、このUnitの起動処理を行う

一覧
オプション 説明
Description Unitの説明文
Documentation ドキュメントのURI
Requires/Wants(*) このUnitと同時に有効化が必要な前提Unit
After このUnitより先に起動するべきUnit
Before このUnitより後に起動するべきUnit

設定例


$ sudo vi /etc/systemd/system/goweb.service
[Unit]
Description = go web start


Installセクションの主要オプション

 閲覧数:114 投稿日:2018-06-25 更新日:2018-07-10 

Installセクションの主要オプション


WantedBy/RequiredBy
・「systemctl enable」コマンドで自動起動を有効化した際に、どの Unitの前提として設定されるべきかを指定する

一覧
オプション 説明
WantedBy enable時にこのUnitの.wantsディレクトリにシンボリックリンクを作成する
RequiredBy enable時にこのUnitの.requiredディレクトリにシンボリックリンクを作成する
Also enable/disable時に同時にenable/disableするUnit
After=network.target sshd-keygen.service
・syslog/network/auditdの 環境がそろってから起動する
WantedBy=multi-user.target
・multi-user.targetの 前提として有効化する
# less /usr/lib/systemd/system/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]
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


serviceセクションの主要オプション

 閲覧数:143 投稿日:2018-07-10 更新日:2018-08-29 

「ExecXXX」オプション


サービスを起動、リロード、停止する際の実行コマンドを指定する
・「EnvironmentFile」で指定したファイルから読み込んだ環境変数と、後述の特殊環境変数 「$MAINPID」を参照できる

ExecStartの実行結果
・起動の成功・失敗が判定される

ExecStartPre/ExecStartPostの結果
・判定には影響しない

ExecStopPost
・ExecStopで正常終了した場合の他に、実行中のプロセスが異常停止した際にも 実行される

一覧
オプション 説明
ExecStart サービス起動コマンド
ExecReload サービスリロードコマンド
ExecStop サービス停止コマンド
ExecStartPre ExecStartPost サービス起動前後の追加コマンド
(サービス起動判定には関連させたくないコマンドを記載)
ExecStopPost サービス停止後に実行するコマンド(サービスが異常停止した際にも実行される)
EnvironmentFile 環境変数を読み込むファイル
KillMode ExecStopで停止せずに残ったプロセスの処理方法
Type サービスプロセスの起動完了の判定方法(デフォルトは「simple」)
PIDFile fork型サービスのメインプロセスのPIDファイル
BusName D-Bus型サービスのbus接続名
Restart サービスプロセス停止時の再起動条件(デフォルトは「no」)
User / Group プロセスを起動するユーザ/グループ
PrivateTmp このサービス専用の/tmpと/var/tmpを用意する
ReadOnlyDirectories 指定のディレクトリ以下をReadOnlyモードにする
InaccessibleDirectories 指定のディレクトリ以下をアクセス不可にする
Root Directory 指定のディレクトリにchrootする
           

Typeオプション


サービスの起動完了を判定するタイミングを指定する

Type=simple
・指定コマンドがフォアグラウンドで実行を継続する場合、コマンドを実行した らすぐに起動完了と判定する

Type=forking
・子プロセスをバックグラウンドで起動して、最初のコマンドは終了する場合、最初のコマンドが終了したタイミングで起動完了と判定する
・「Type=forking」はメインプロセスの追跡にPIDファイルが必要となることか ら、systemdのサービス設定では、「Type=forking」よりも「Type=simple/notify」の利 用が推奨される
・例えば、Fedora17のhttpd.serviceでは「Type=forking」だったものが、Fedroa19では 「Type=notify」に変更されている
・CentOS7でも、「/usr/lib/systemd/system/httpd.service」のTypeは、デフォルトで「Type=notify」

Type=oneshot
・一度だけコマンドを実行するタイプのサービスの場合、コマンドが終了した ら起動完了と判定して、サービスも終了したものと認識する
※「RemainAfterExit=yes」 を指定すると、コマンド終了後もサービスは起動したままと認識する

Type=nofity
・systemdのライブラリ関数「sd_notify()」を使用する場合。プロセスのプログラム内部で、sd_notify()関数で起動完了を通知するように作られている必要がある
User:Johannbg/QA/Systemd/Sd notify
・httpdがsystemd前提に作られている。 mod_systemdモジュールでsystemdに対応している。[PATCH] mod_systemd

Type=dbus
・D-Bus(プロセス間通信用メッセージバス)を利用するサ―ビスの場合、BusNameで指定した接続名がD-Busに登録されると、サービス起動完了と判定する

「メインプロセス」の PID


systemdは、サービスに関連するプロセス群の中で最初に実行された「メインプロセス」の PIDを認識しており、ExecXXXオプション内から環境変数$MAINPIDで参照できる
・ExecReloadオプションで、メインプロセスにHUPシグナルを送る際などに利用できる
・「type=simple」の場合は、ExecStartで起動したプロセスがメインプロセスになる
・「type=forking」の場合は、PIDFileオプションで指定のPIDファイルからメインプロセスを判定する(サービス起動コマンドが、PIDファイルを生成する作りになっている必要がある)

プロセスが異常終了した際の動作設定


プロセスが異常終了した際の動作設定(従来のrespawn設定)は次のとおり

Restartオプションでサービスの再起動を行うかどうか指定する
・Restart=no : サービスの再起動は行わない
・Restart=always : サービスの再起動を行う

デフォルトでは、10秒間の間に5回以上再起動すると、次の10秒間は再起動を試みない
・一般に は、「StartLimitIntervalの間にStartLimitBurst回以上再起動すると、次のStartLimitIntervalの 間は再起動を試みない」
・つまり、「StartLimitInterval=10s」「StartLimitBurst=5」がデ フォルト設定

Cgroupsの個別のグループ


systemdは、起動したサービスに関連するすべてのプロセスをCgroupsの個別のグループに 入れて管理している
・ExecStopのコマンドでサービスを停止した際、グループ内にプロセスが残っている場合 は、KillModeの設定に応じて残プロセスの処理を行う

KillMode=none
・残プロセスはそのまま放置する

KillMode=process
・メインプロセスが残っている場合は、SIGTERM/SIGKILLで停止する
・そ の他の残プロセスは放置する

KillMode= control-group
・グループ内のすべての残プロセスを、SIGTERM/SIGKILLで停止する

設定例


$ sudo vi /etc/systemd/system/goweb.service
[Service]
ExecStart = /opt/goweb
Restart = always
Type = simple


sshd.service / httpd.service

 閲覧数:124 投稿日:2018-07-26 更新日:2018-08-04 

sshd.service


ExecStart=/usr/sbin/sshd -D $OPTIONS
・-Dオプション(デーモンモード)により、 最初のコマンドがそのまま実行を継続する
・従って「Type=simple(デフォルト)」が必要

ExecReload=/bin/kill -HUP $MAINPID
・reload処理は、メインプロセスに HUPシグナルを送る

KillMode=process
・サービス終了時に残った 子プロセスは放置する

# less /usr/lib/systemd/system/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]
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


httpd.service


Type=forking
・メインプロセスの追跡にPIDファイルが必要となることか ら、systemdのサービス設定では、「Type=forking」よりも「Type=simple/notify」の利 用が推奨される

Type=notify
・httpdがsystemd前提に作られている。 mod_systemdモジュールでsystemdに対応している。[PATCH] mod_systemd

ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
・DFOREGROUNDオプションにより、このコマンドが実行を 継続する
・起動完了はsd_notify()関数で通知する

# less /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target


User/Group


「ExecXXX=」で指定されたコマンドを実行するユーザ/グループを指定する
・「PermissionsStartOnly=yes」を指定すると「ExecStart=」で指定したコマンドのみが指定 ユーザ/グループで実行される

ReadOnlyDirectories InaccessibleDirectories Root Directory


サービスに関連するプロセスからアクセスできるディレクトリを制限する
・これらの機能は、ファイルシステムのネームスペースを分離することで実現している
・そのた め、サービスを提供するプロセスがこのネームスペース内で実施したバインドマウントは、他 のプロセスからは見えなくなるという制限がある
・稀な例だが、サービスプロセスが「ip netns」コマンドを使用する際に問題が発生する。このコマンドは、/proc以下にあるNetwork Namespaceの情報を/var/run/netns/以下にバインド マウントすることで、他のプロセスと情報共有するため
※Bug 872689 - Quantum: root cannot access network namespaces created by Quantum service https://bugzilla.redhat.com/show_bug.cgi?id=872689


systemd徹底入門



CentOS7でsystemdを使ってgolangで作ったプログラムをデーモン化する 
Systemdを使ってさくっと自作コマンドをサービス化してみる


Systemd
systemd - ArchWiki







systemd を使って自作スクリプトをサービス化してみた

(CentOS7から)Systemdによるシステムとサービスの管理
9.6. システムのユニットファイルの作成および変更 - Red Hat Customer Portal
serviceタイプUnitの設定ファイル 

Twitter検索結果。「Systemd」に関する最新ツイート

ちぇけ@地方都市サーバエンジニア @nevec555
アーサー㌠ @KokToH_kuro
Poscat @Poscat0x04
澄みわたる朝色 @zhaose2

manページ日本語表示

トラブル対応



類似度ページランキング
順位 ページタイトル抜粋
1 sed 60
2 yum update bash 55
3 paste 50
4 CentOSのyumリポジトリ 45
5 Set User ID 44
6 history 43
7 CentOS_LetsEncrypt 40
8 CasperJS 40
9 basename 40
10 DirectoryIndex 38
11 PhantomJS 38
12 less 36
13 make 36
14 host 36
15 head 36
16 more 36
17 Session Storage 36
18 Sticky Bit 35
19 WebStorage 35
20 sedコマンド使用例 35
2021/9/21 12:07 更新
週間人気ページランキング / 9-14 → 9-20
順位 ページタイトル抜粋 アクセス数
1 PHPのmb_send_mail関数でメール送信できない | メール処理システム 29
2 Nginx設定。エラーログレベル | Nginx(Webサーバ) 21
3 Python 3.5 アンインストール / yum remove | Python(プログラミング言語) 11
4 FFmpeg 2.8.15 を yum インストール | ソフトウェアスイート 10
5 PHP実行ユーザ設定 / CentOS6 / Apache | PHP(プログラミング言語) 9
6 PHP Version 7.1.2 php-mecabエクステンション対応 / PHP 7.0.14 からのアップグレード  | MeCab(形態素解析) 8
6 ソースからビルドしたPython 2.7.3 アンインストール失敗 | Python(プログラミング言語) 8
7 touch コマンド / viコマンド。新規ファイル作成時の違い | Linuxコマンド 7
7 さくらVPS0 7
8 9回目-13.MySQL5.7.21設定 | CentOS 7 2週間無料のお試し期間 9回目(さくらVPS) 6
8 「設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。」対応 6
9 PHPファイルでchmodエラー | PHP(プログラミング言語) 5
9 設定 2019/1/22 / 一般ユーザがmailコマンドでメール送信 / 管理者がmailコマンドでメール送信 5
10 Postfix | メール処理システム 4
10 CentOSでcpコマンド動作確認するためには、Control + T ではなく、 -v オプションを使用 | cp(Linuxコマンド) 4
10 499 (Request has been forbidden by antivirus) | HTTP(通信プロトコル) 4
10 tar | Linuxコマンド 4
10 Python 3.6 インストール / make altinstall | Python(プログラミング言語) 4
10 「CentOS6」から「CentOS7」への移行 | CentOS 7 (CentOS) 4
10 echo と cat の違い 4
2021/9/21 1:01 更新