Memo/Linux/systemd
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*systemd [#db7a1e11]
- RHEL/CentOS
-- 6までは''initd''を使用している。
-- 7以上はinitdから''systemd''に変わった。
記事:
- [[systemdエッセンシャル / systemd-intro - Speaker Deck:...
- [[OS起動時にsystemdで行われていること - Qiita:https://q...
- [[systemd チートシート - Redhat:https://access.redhat.c...
- [[systemd.directives:https://www.freedesktop.org/softwa...
----
** よく使うコマンド [#k20a2cda]
#geshi(bash){{
# 設定ファイルの再読込
sudo systemctl daemon-reload
# 起動
sudo systemctl start ${Unit}
# 停止
sudo systemctl stop ${Unit}
# 再起動
sudo systemctl restart ${Unit}
# リロード
sudo systemctl reload ${Unit}
# ステータス表示
sudo systemctl status ${Unit}
# 自動起動有効
sudo systemctl enable ${Unit}
# 自動起動無効
sudo systemctl disable ${Unit}
# 自動起動設定確認
sudo systemctl is-enabled ${Unit}
# サービス一覧
sudo systemctl list-unit-files --type=service
# 定期実行(timer)一覧
sudo systemctl list-unit-files --type=timer
sudo systemctl list-timers
}}
----
** Type=simpleでPID_FILEを作りたい場合 [#q3a80a3e]
- 例: 外部プロセス(monit等)でPID_FILEを参照したい。Type=s...
- ExecStartPostで"$MAINPID"を"$PID_FILE"に出力
#geshi(ini){{
[Unit]
Description=example service
After=syslog.target network.target
[Service]
Type=simple
User=example
Group=example
WorkingDirectory=/opt/example
Restart=always
TimeoutSec=90
EnvironmentFile=-/etc/sysconfig/example
Environment=PID_FILE=/var/run/example.pid
ExecStartPre=+/bin/mkdir -p /run/example
ExecStartPre=+/bin/chown example:example /run/example
ExecStart=/opt/example/bin/node /opt/example/bin/app.js
ExecStartPost=/bin/sh -c "echo $MAINPID > $PID_FILE"
StandardOutput=append:/var/log/example/example.log
StandardError=append:/var/log/example/example.log
LimitNOFILE=10240
[Install]
WantedBy=multi-user.target
}}
---
** CPU/Memory/IO等のリソース使用量を制限 [#t6cea4ec]
- ホスト内に他に重要なプロセスがあり、そちらにリソース使...
- CentOS 7のsystemd(systemd-219-62.el7_6.6.x86_64)ではIOW...
- AlmaLinux9: systemd-252-46.el9_5.2.alma.1
#geshi(bash){{
sudo systemctl edit example.service
--
[Service]
# 優先度を変更する場合
# プロセスの優先度。default 0
Nice=19
# IOの重み。default 100
IOWeight=10
# 重み。1-10000, default 100. 200のほうが優先度が高い。利...
CPUWeight=10
# 1 CPU coreあたりの使用を制限
CPUQuota=10%
# 物理メモリの割当上限
MemoryLimit=128M
--
# 以下が自動生成される
/etc/systemd/system/example.service.d/override.conf
sudo systemctl daemon-reload
sudo serivce example restart
}}
記事:
- [[systemd.resource-control:https://www.freedesktop.org/...
- [[26.4. systemd の CPU 時間割り当てポリシーオプション |...
- [[systemdのサービスにCPUを使わせすぎない方法(案) #cgrou...
----
** timer: 定期実行 [#xf8ef883]
- list: 例: AlmaLinux 9.4
#geshi(bash){{
systemctl list-timers
NEXT LEFT LAST ...
Fri 2024-11-29 01:46:48 UTC 4min 55s left Fri 2024-11-29 ...
Fri 2024-11-29 02:40:33 UTC 58min left Fri 2024-11-29 ...
Fri 2024-11-29 06:12:02 UTC 4h 30min left Thu 2024-11-28 ...
Sat 2024-11-30 00:00:00 UTC 22h left Fri 2024-11-29 ...
Sat 2024-11-30 00:00:00 UTC 22h left Fri 2024-11-29 ...
}}
- logrotate.timer のようにcronからsystemd.timerへ変わった...
#geshi(bash){{
/etc/systemd/system/timers.target.wants/logrotate.timer
}}
----
** Restart: 異常終了時に自動再起動させる [#a158a70d]
- [[Restart=:https://www.freedesktop.org/software/systemd...
-- "Type=forking" の場合、"PIDFile=<pid path>"が必要
-- "Type=simple" の場合、"PIDFile="は不要のようだ
- always: 常時再起動。"kill java" 等で再起動させたい場合...
- on-failure: 終了ステータスが異常値(0以外)の時に再起動。...
#geshi(ini){{
[Service]
Restart=on-failure
}}
記事:
- [[systemdでプロセス自動再起動 | 晴耕雨読:https://tex2e....
確認方法:
#geshi(bash){{
proc_user=chrony
proc_name=chronyd
pgrep -u $proc_user $proc_name
64195
sudo pkill -u $proc_user $proc_name
# systemdで再起動され、pidが変わったか確認
pgrep -u $proc_user $proc_name
# ログの確認
sudo service $proc_name status
...
# Activeが起動した時間に変わっている
Active: active (running) since ...
# ログに起動時のログが出ている
}}
----
** 環境変数を設定 [#n7636953]
- /etc/systemd/system/myservice.service.d/env.conf
#geshi(ini){{
[Service]
Environment="MYENV=dummy"
}}
- 再起動
#geshi(bash){{
sudo systemctl daemon-reload
sudo service myservice restart
# 値が設定されているか確認
systemctl show myservice.service | grep -i -E "Env"
}}
----
** umaskの変更 [#cf3e0759]
- プロセスのumaskの確認
#geshi(bash){{
grep -i umask /proc/$(pgrep -u chrony chrony)/status
Umask: 0022
}}
- systemdのumaskの確認
#geshi(bash){{
systemctl show chrony.service | grep -i -E "umask"
UMask=0022
}}
例: apacheでログファイルのパーミッションを664にしたい。
- CentOS 6までは /etc/sysconfig/httpd の中にumaskを書いて...
- 既にsystemdの設定がある場合は、一部の設定を上書きできる。
- /etc/systemd/system/httpd.service.d/umask.conf
#geshi(ini){{
[Service]
UMask=0002
}}
- 再起動
#geshi(bash){{
sudo systemctl daemon-reload
sudo service httpd restart
}}
- 記事
-- [[CentOS7 apacheのumask設定(systemd) - よくわからない...
----
** ネットワークが有効になった後に実行 [#d3fc16bc]
- network-online.targetがポイント
#geshi(text){{
[Unit]
...
After=network-online.target
}}
- 記事
-- [[Amazon Linux 2 が起動してネットワークが有効になった...
----
** 一部設定の上書き [#w92da07f]
- rpmでは以下に追加される。このファイルを書き換えると、rp...
#geshi(bash){{
/usr/lib/systemd/system/<unit>.service
}}
- 以下のファイルに書くと上書きされる
#geshi(bash){{
/etc/systemd/system/<unit>.d/<any>.conf
}}
- 手動で書き換える場合
-- service
#geshi(bash){{
sudo systemctl edit nginx.service
--
[Service]
ExecStart=
ExecStart=<new config>
--
# 以下が自動生成される
/etc/systemd/system/nginx.service.d/override.conf
}}
-- timer
#geshi(bash){{
sudo systemctl edit logrotate.timer
# 以下が自動生成される
/etc/systemd/system/logrotate.timer.d/override.conf
}}
-- 「sudo systemctl daemon-reload」は自動実行されるようで...
- プログラムで配置する場合
-- override.conf は手動用として、ansible等で配置する場合...
-- 「sudo systemctl daemon-reload」が必要
- 変更の確認。設定ファイルのkeyとshowで出力されるkeyが違...
#geshi(bash){{
systemctl show nginx
# OR
systemctl show nginx -p ExecStart
}}
----
** journalログをsyslogへ転送する [#e1c3d891]
-記事
--[[systemd環境でアプリのログをsyslogに流す - Qiita:https...
- /etc/systemd/journald.conf
-- ForwardToSyslog=yes : syslogへ転送する(デフォルト)
- /etc/systemd/system/<program>.service
-- [[ExecStart:https://www.freedesktop.org/software/syste...
#geshi(bash){{
ExecStart=/path/to/program >> /var/log/program.log
}}
-- [[StandardOutput:https://www.freedesktop.org/software/...
--- null: ログファイルを出力しない
--- syslog: rsyslogへ転送(/var/log/)
--- journal: journalだけ
--- journal+console: jornalとconsoleだけ
--- その他いろいろあるのでman参照
----
** journalctl: systemdログを表示 [#o52da420]
- 例: sudo service logrotate statusでもログの一部が見え...
- "-u": 特定ユニットのログを表示
#geshi(bash){{
sudo journalctl -u logrotate
}}
- "-p" : 指定優先度のログのみ表示。"emerg","alert","err",...
#geshi(bash){{
sudo journalctl -p err
}}
- "--since","--until": 指定日時より新しい/古いログを表示...
#geshi(bash){{
# 昨日からのログを表示
sudo journalctl --since="yesterday"
}}
----
**デフォルト設定 [#k724cb74]
- RHEL/CentOS 7
#geshi(bash){{
grep TimeoutStart /etc/systemd/system.conf
#DefaultTimeoutStartSec=90s
}}
----
**ulimitの変更(max open files/max processes) [#wb053683]
- systemdの場合、pam用の「/etc/security/limits.d/」に置い...
- コマンドでの確認も、ユーザのulimitを確認しても無意味で...
- 確認コマンド
#geshi(bash){{
for pid in $(pgrep mongod); do sudo cat /proc/$pid/limits...
Max processes 64000 64000 ...
Max open files 64000 64000 ...
}}
- [[Memo/MongoDB]] RHEL/CentOS 7の場合
#geshi(bash){{
sudo mkdir /etc/systemd/system/mongod.service.d
sudo vim /etc/systemd/system/mongod.service.d/limits.conf
--
# https://docs.mongodb.com/manual/reference/ulimit/
#
# The settings is what mongoDB officially recommends.
#
[Service]
# Other directives omitted
# (file size)
LimitFSIZE=infinity
# (cpu time)
LimitCPU=infinity
# (virtual memory size)
LimitAS=infinity
# (open files)
LimitNOFILE=64000
# (processes/threads)
LimitNPROC=64000
--
sudo systemctl daemon-reload
sudo service mongod restart
}}
----
**起動/終了時のタイムアウトの変更 [#xdb77587]
- [[TimeoutStartSec:https://www.freedesktop.org/software/...
- [[TimeoutStopSec:https://www.freedesktop.org/software/s...
- [[TimeoutSec:https://www.freedesktop.org/software/syste...
- 設定できる値は「300」や「5m」のように書ける
- TimeoutStartSec="3m" のようにダブルクオーテーションで括...
- 設定ファイル内のパラメータ名(TimeoutStartSec)と、コマン...
- デフォルトserviceの確認: RHEL/CentOS 7では90秒
#geshi(bash){{
systemctl show service -p TimeoutStartUSec
TimeoutStartUSec=1min 30s
}}
- [[Memo/MongoDB]]のTimeoutStartSecを90秒から3分に伸ばす
#geshi(bash){{
sudo vim /etc/systemd/system/mongod.service.d/timeout.conf
--
[Service]
TimeoutStartSec=3m
--
sudo systemctl daemon-reload
systemctl show mongod -p TimeoutStartUSec
TimeoutStartUSec=3min
}}
- 記事
-- [[10.6. systemd のユニットファイルの作成および変更 Red...
終了行:
#contents
*systemd [#db7a1e11]
- RHEL/CentOS
-- 6までは''initd''を使用している。
-- 7以上はinitdから''systemd''に変わった。
記事:
- [[systemdエッセンシャル / systemd-intro - Speaker Deck:...
- [[OS起動時にsystemdで行われていること - Qiita:https://q...
- [[systemd チートシート - Redhat:https://access.redhat.c...
- [[systemd.directives:https://www.freedesktop.org/softwa...
----
** よく使うコマンド [#k20a2cda]
#geshi(bash){{
# 設定ファイルの再読込
sudo systemctl daemon-reload
# 起動
sudo systemctl start ${Unit}
# 停止
sudo systemctl stop ${Unit}
# 再起動
sudo systemctl restart ${Unit}
# リロード
sudo systemctl reload ${Unit}
# ステータス表示
sudo systemctl status ${Unit}
# 自動起動有効
sudo systemctl enable ${Unit}
# 自動起動無効
sudo systemctl disable ${Unit}
# 自動起動設定確認
sudo systemctl is-enabled ${Unit}
# サービス一覧
sudo systemctl list-unit-files --type=service
# 定期実行(timer)一覧
sudo systemctl list-unit-files --type=timer
sudo systemctl list-timers
}}
----
** Type=simpleでPID_FILEを作りたい場合 [#q3a80a3e]
- 例: 外部プロセス(monit等)でPID_FILEを参照したい。Type=s...
- ExecStartPostで"$MAINPID"を"$PID_FILE"に出力
#geshi(ini){{
[Unit]
Description=example service
After=syslog.target network.target
[Service]
Type=simple
User=example
Group=example
WorkingDirectory=/opt/example
Restart=always
TimeoutSec=90
EnvironmentFile=-/etc/sysconfig/example
Environment=PID_FILE=/var/run/example.pid
ExecStartPre=+/bin/mkdir -p /run/example
ExecStartPre=+/bin/chown example:example /run/example
ExecStart=/opt/example/bin/node /opt/example/bin/app.js
ExecStartPost=/bin/sh -c "echo $MAINPID > $PID_FILE"
StandardOutput=append:/var/log/example/example.log
StandardError=append:/var/log/example/example.log
LimitNOFILE=10240
[Install]
WantedBy=multi-user.target
}}
---
** CPU/Memory/IO等のリソース使用量を制限 [#t6cea4ec]
- ホスト内に他に重要なプロセスがあり、そちらにリソース使...
- CentOS 7のsystemd(systemd-219-62.el7_6.6.x86_64)ではIOW...
- AlmaLinux9: systemd-252-46.el9_5.2.alma.1
#geshi(bash){{
sudo systemctl edit example.service
--
[Service]
# 優先度を変更する場合
# プロセスの優先度。default 0
Nice=19
# IOの重み。default 100
IOWeight=10
# 重み。1-10000, default 100. 200のほうが優先度が高い。利...
CPUWeight=10
# 1 CPU coreあたりの使用を制限
CPUQuota=10%
# 物理メモリの割当上限
MemoryLimit=128M
--
# 以下が自動生成される
/etc/systemd/system/example.service.d/override.conf
sudo systemctl daemon-reload
sudo serivce example restart
}}
記事:
- [[systemd.resource-control:https://www.freedesktop.org/...
- [[26.4. systemd の CPU 時間割り当てポリシーオプション |...
- [[systemdのサービスにCPUを使わせすぎない方法(案) #cgrou...
----
** timer: 定期実行 [#xf8ef883]
- list: 例: AlmaLinux 9.4
#geshi(bash){{
systemctl list-timers
NEXT LEFT LAST ...
Fri 2024-11-29 01:46:48 UTC 4min 55s left Fri 2024-11-29 ...
Fri 2024-11-29 02:40:33 UTC 58min left Fri 2024-11-29 ...
Fri 2024-11-29 06:12:02 UTC 4h 30min left Thu 2024-11-28 ...
Sat 2024-11-30 00:00:00 UTC 22h left Fri 2024-11-29 ...
Sat 2024-11-30 00:00:00 UTC 22h left Fri 2024-11-29 ...
}}
- logrotate.timer のようにcronからsystemd.timerへ変わった...
#geshi(bash){{
/etc/systemd/system/timers.target.wants/logrotate.timer
}}
----
** Restart: 異常終了時に自動再起動させる [#a158a70d]
- [[Restart=:https://www.freedesktop.org/software/systemd...
-- "Type=forking" の場合、"PIDFile=<pid path>"が必要
-- "Type=simple" の場合、"PIDFile="は不要のようだ
- always: 常時再起動。"kill java" 等で再起動させたい場合...
- on-failure: 終了ステータスが異常値(0以外)の時に再起動。...
#geshi(ini){{
[Service]
Restart=on-failure
}}
記事:
- [[systemdでプロセス自動再起動 | 晴耕雨読:https://tex2e....
確認方法:
#geshi(bash){{
proc_user=chrony
proc_name=chronyd
pgrep -u $proc_user $proc_name
64195
sudo pkill -u $proc_user $proc_name
# systemdで再起動され、pidが変わったか確認
pgrep -u $proc_user $proc_name
# ログの確認
sudo service $proc_name status
...
# Activeが起動した時間に変わっている
Active: active (running) since ...
# ログに起動時のログが出ている
}}
----
** 環境変数を設定 [#n7636953]
- /etc/systemd/system/myservice.service.d/env.conf
#geshi(ini){{
[Service]
Environment="MYENV=dummy"
}}
- 再起動
#geshi(bash){{
sudo systemctl daemon-reload
sudo service myservice restart
# 値が設定されているか確認
systemctl show myservice.service | grep -i -E "Env"
}}
----
** umaskの変更 [#cf3e0759]
- プロセスのumaskの確認
#geshi(bash){{
grep -i umask /proc/$(pgrep -u chrony chrony)/status
Umask: 0022
}}
- systemdのumaskの確認
#geshi(bash){{
systemctl show chrony.service | grep -i -E "umask"
UMask=0022
}}
例: apacheでログファイルのパーミッションを664にしたい。
- CentOS 6までは /etc/sysconfig/httpd の中にumaskを書いて...
- 既にsystemdの設定がある場合は、一部の設定を上書きできる。
- /etc/systemd/system/httpd.service.d/umask.conf
#geshi(ini){{
[Service]
UMask=0002
}}
- 再起動
#geshi(bash){{
sudo systemctl daemon-reload
sudo service httpd restart
}}
- 記事
-- [[CentOS7 apacheのumask設定(systemd) - よくわからない...
----
** ネットワークが有効になった後に実行 [#d3fc16bc]
- network-online.targetがポイント
#geshi(text){{
[Unit]
...
After=network-online.target
}}
- 記事
-- [[Amazon Linux 2 が起動してネットワークが有効になった...
----
** 一部設定の上書き [#w92da07f]
- rpmでは以下に追加される。このファイルを書き換えると、rp...
#geshi(bash){{
/usr/lib/systemd/system/<unit>.service
}}
- 以下のファイルに書くと上書きされる
#geshi(bash){{
/etc/systemd/system/<unit>.d/<any>.conf
}}
- 手動で書き換える場合
-- service
#geshi(bash){{
sudo systemctl edit nginx.service
--
[Service]
ExecStart=
ExecStart=<new config>
--
# 以下が自動生成される
/etc/systemd/system/nginx.service.d/override.conf
}}
-- timer
#geshi(bash){{
sudo systemctl edit logrotate.timer
# 以下が自動生成される
/etc/systemd/system/logrotate.timer.d/override.conf
}}
-- 「sudo systemctl daemon-reload」は自動実行されるようで...
- プログラムで配置する場合
-- override.conf は手動用として、ansible等で配置する場合...
-- 「sudo systemctl daemon-reload」が必要
- 変更の確認。設定ファイルのkeyとshowで出力されるkeyが違...
#geshi(bash){{
systemctl show nginx
# OR
systemctl show nginx -p ExecStart
}}
----
** journalログをsyslogへ転送する [#e1c3d891]
-記事
--[[systemd環境でアプリのログをsyslogに流す - Qiita:https...
- /etc/systemd/journald.conf
-- ForwardToSyslog=yes : syslogへ転送する(デフォルト)
- /etc/systemd/system/<program>.service
-- [[ExecStart:https://www.freedesktop.org/software/syste...
#geshi(bash){{
ExecStart=/path/to/program >> /var/log/program.log
}}
-- [[StandardOutput:https://www.freedesktop.org/software/...
--- null: ログファイルを出力しない
--- syslog: rsyslogへ転送(/var/log/)
--- journal: journalだけ
--- journal+console: jornalとconsoleだけ
--- その他いろいろあるのでman参照
----
** journalctl: systemdログを表示 [#o52da420]
- 例: sudo service logrotate statusでもログの一部が見え...
- "-u": 特定ユニットのログを表示
#geshi(bash){{
sudo journalctl -u logrotate
}}
- "-p" : 指定優先度のログのみ表示。"emerg","alert","err",...
#geshi(bash){{
sudo journalctl -p err
}}
- "--since","--until": 指定日時より新しい/古いログを表示...
#geshi(bash){{
# 昨日からのログを表示
sudo journalctl --since="yesterday"
}}
----
**デフォルト設定 [#k724cb74]
- RHEL/CentOS 7
#geshi(bash){{
grep TimeoutStart /etc/systemd/system.conf
#DefaultTimeoutStartSec=90s
}}
----
**ulimitの変更(max open files/max processes) [#wb053683]
- systemdの場合、pam用の「/etc/security/limits.d/」に置い...
- コマンドでの確認も、ユーザのulimitを確認しても無意味で...
- 確認コマンド
#geshi(bash){{
for pid in $(pgrep mongod); do sudo cat /proc/$pid/limits...
Max processes 64000 64000 ...
Max open files 64000 64000 ...
}}
- [[Memo/MongoDB]] RHEL/CentOS 7の場合
#geshi(bash){{
sudo mkdir /etc/systemd/system/mongod.service.d
sudo vim /etc/systemd/system/mongod.service.d/limits.conf
--
# https://docs.mongodb.com/manual/reference/ulimit/
#
# The settings is what mongoDB officially recommends.
#
[Service]
# Other directives omitted
# (file size)
LimitFSIZE=infinity
# (cpu time)
LimitCPU=infinity
# (virtual memory size)
LimitAS=infinity
# (open files)
LimitNOFILE=64000
# (processes/threads)
LimitNPROC=64000
--
sudo systemctl daemon-reload
sudo service mongod restart
}}
----
**起動/終了時のタイムアウトの変更 [#xdb77587]
- [[TimeoutStartSec:https://www.freedesktop.org/software/...
- [[TimeoutStopSec:https://www.freedesktop.org/software/s...
- [[TimeoutSec:https://www.freedesktop.org/software/syste...
- 設定できる値は「300」や「5m」のように書ける
- TimeoutStartSec="3m" のようにダブルクオーテーションで括...
- 設定ファイル内のパラメータ名(TimeoutStartSec)と、コマン...
- デフォルトserviceの確認: RHEL/CentOS 7では90秒
#geshi(bash){{
systemctl show service -p TimeoutStartUSec
TimeoutStartUSec=1min 30s
}}
- [[Memo/MongoDB]]のTimeoutStartSecを90秒から3分に伸ばす
#geshi(bash){{
sudo vim /etc/systemd/system/mongod.service.d/timeout.conf
--
[Service]
TimeoutStartSec=3m
--
sudo systemctl daemon-reload
systemctl show mongod -p TimeoutStartUSec
TimeoutStartUSec=3min
}}
- 記事
-- [[10.6. systemd のユニットファイルの作成および変更 Red...
ページ名: