ããã¯ããªã«ãããããŠæžãããã®ïŒ
systemdã®ãŠãããå®çŸ©ãã¡ã€ã«ã§ãããã©ãã«çœ®ããã®ã ã£ããããå¿ããã®ã§ã
ã¡ãã£ãšèª¿ã¹ãŠãã¡ã¢ããŠãããããªãšã
manãèŠã
ãŸãã¯ãsystemdã®ããã¥ã¢ã«ãèŠãŠã¿ãŸãã
systemd(1) - Linux manual page
DIRECTORIESã«ã説æãæžããŠãããŸãã
System Unit DirectoryãšãUser Unit Directoryã®2ã€ãããããã§ãã
å®å šãªãã£ã¬ã¯ããªã®ãªã¹ãã¯ãsystemd.unitãèŠãŠãã ããããšã
Full list of directories is provided in systemd.unit(5).
User Unitã£ãŠãªãã§ãããïŒ
ã©ããããsystemdã«ã¯ã·ã¹ãã ã¢ãŒããšãŠãŒã¶ãŒã¢ãŒãã®2ã€ãããããã§ãã
--system, --user
it shall operate in system or per-user mode,
ãŠãŒã¶ãŒã¢ãŒãã¯ããŠãŒã¶ãŒããã°ã€ã³ããæã«ãŠãŒã¶ãŒããšã®ãµãŒãã¹ãå®è¡ããã¢ãŒãã®ããã§ãããŠãŒã¶ãŒã»ãã·ã§ã³ã
æ®ã£ãŠããéãåäœãç¶ãããŠãŒã¶ãŒã®ã»ãã·ã§ã³ããªããªããšçµäºããããšãç¥ããªãã£ãã§ãã
äžæ¹ã§ããµãŒããŒçšéã§ã®systemdã§éŠŽæã¿ãããã®ã¯ã·ã¹ãã ã¢ãŒãã ãšæããŸãã
ãšããããã§ã以éã¯åºæ¬çã«ã¯ã·ã¹ãã ã¢ãŒãã®è©±ã§ãããŸãã
systemd.unit
ããŠãsystemd.unitã®ããã¥ã¡ã³ããèŠãããã«æžãããŠããã®ã§ãèŠãŠã¿ãŸãããã
systemd.unit(5) - Linux manual page
ã·ã¹ãã ã¢ãŒãããŠãŒã¶ãŒã¢ãŒãããããã§systemdãåç §ãããã¹ã¯ã以äžã®ããã§ãã
- System Unit Search Path
- /etc/systemd/system.control/*
- /run/systemd/system.control/*
- /run/systemd/transient/*
- /run/systemd/generator.early/*
- /etc/systemd/system/*
- /etc/systemd/system.attached/*
- /run/systemd/system/*
- /run/systemd/system.attached/*
- /run/systemd/generator/*
- ...
- /usr/lib/systemd/system/*
- /run/systemd/generator.late/*
- User Unit Search Path
- ~/.config/systemd/user.control/*
- $XDG_RUNTIME_DIR/systemd/user.control/*
- $XDG_RUNTIME_DIR/systemd/transient/*
- $XDG_RUNTIME_DIR/systemd/generator.early/*
- ~/.config/systemd/user/*
- $XDG_CONFIG_DIRS/systemd/user/*
- /etc/systemd/user/*
- $XDG_RUNTIME_DIR/systemd/user/*
- /run/systemd/user/*
- $XDG_RUNTIME_DIR/systemd/generator/*
- $XDG_DATA_HOME/systemd/user/*
- $XDG_DATA_DIRS/systemd/user/*
- ...
- /usr/lib/systemd/user/*
- $XDG_RUNTIME_DIR/systemd/generator.late/*
ã·ã¹ãã ã¢ãŒãã®æ¹ã®ãã¹ãèŠããšã/etc/systemd/system/*
ã/usr/lib/systemd/system/*
ãšããèŠããã¹ãåºãŠãããšæããŸãã
ããããã®ãã¹ã®èª¬æã¯ãUNIT FILE LOAD PATHã«æžãããŠããŸãã
systemd.unit / UNIT FILE LOAD PATH
æç²ããŠã¿ãŸãããã
/usr/lib/systemd/system
⊠System units installed by the distribution package managerïŒããã±ãŒãžãããŒãžã£ãŒã«ãã£ãŠã€ã³ã¹ããŒã«ãããã·ã¹ãã ãŠãããïŒ/etc/systemd/system
⊠System units created by the administratorïŒç®¡çè ã«ãã£ãŠäœæãããã·ã¹ãã ãŠãããïŒ
ãã®èª¬æãèŠãŠãããã±ãŒãžã䜿ãã®ã¯/usr/lib/systemd/system
ãå©çšè
ïŒãµãŒããŒã®ç®¡çè
ïŒã䜿ãã®ã¯
/etc/systemd/system
ãšããããšããªããšãªãããããŸãããEXAMPLESã«ããå°ãå
·äœçã«æžãããŠããŸãã
ããšãã°ããã³ããŒïŒããã±ãŒãžæäŸè
ïŒã®èšå®ããªãŒããŒã©ã€ãããã«ã¯/usr/lib/systemd/system
ã«ãããŠãããå®çŸ©ãã¡ã€ã«ã
/etc/systemd/system
ã«ã³ããŒããŠå€æŽããŸãããšã
files: copying the unit file from /usr/lib/systemd/system to /etc/systemd/system and modifying the chosen settings.
ãŸãã¯ãunit.d
ãã£ã¬ã¯ããªãäœã£ãŠãããã¿ããã§ããâŠãã¡ãã¯ä»åã¯çœ®ããŠãããŸãã
Alternatively, one can create a directory named unit.d/ within /etc/systemd/system and place a drop-in file name.
usr/lib/systemd/system
ãã/etc/systemd/system
ã«ã³ããŒããŠå€æŽããå Žåããã¡ã€ã«ã¯å®å
šã«äžæžãã«ãªãã
ãã以éãã³ããŒåŽã®ãŠãããå®çŸ©ãã¡ã€ã«ã¯èªãŸããŸããã
The advantage of the first method is that one easily overrides the complete unit, the vendor unit is not parsed at all anymore.
ã€ãŸãã/etc/systemd/system
ã®æ¹ãåªå
床ãé«ãããšã«ãªããŸãã
ãšããããã§ã/usr/lib/systemd/system
ãš/etc/systemd/system
ã®äœ¿ãåãã¯ããã£ãæ°ãããŸãã
ããšãç¥ã£ãŠãããæ¹ãè¯ããããªã®ã¯/run/systemd/system
ãšããå®è¡æã«èªåçã«äœæããããŠãããå®çŸ©ãã¡ã€ã«ã
é
眮ãããã£ã¬ã¯ããªã§ããã
åèãŸã§ã«ãRet Hat Enterprise Linuxã®systemd ãŠãããå®çŸ©ãã¡ã€ã«ã®ããã¥ã¡ã³ããèŠãŠãããæ¹ãè¯ãããã§ãã
第17章 systemd ユニットファイルでの作業 Red Hat Enterprise Linux 8 | Red Hat Customer Portal
ãããŸã§ããã¥ã¡ã³ããããããèŠãŠããã®ã§ãå°ãå®éã«ç¢ºèªããŠã¿ããšããŸãããã
次ã®2ã€ã®ãã¿ãŒã³ãè©ŠããŠã¿ãããšæããŸãã
- ããã±ãŒãžãã€ã³ã¹ããŒã«ããŠããã®ãŠãããå®çŸ©ãã¡ã€ã«ãã«ã¹ã¿ãã€ãºãã
- ç¬èªã®ãŠãããå®çŸ©ãã¡ã€ã«ãäœæãã
ç°å¢
ä»åã®ç°å¢ã¯ããã¡ãã§ãã
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.2 LTS Release: 20.04 Codename: focal $ uname -srvmpio Linux 5.4.0-74-generic #83-Ubuntu SMP Sat May 8 02:35:39 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Ubuntu Linux 20.04 LTSã§ãã
Apacheãããã±ãŒãžã€ã³ã¹ããŒã«ããŠãã«ã¹ã¿ãã€ãºããŠã¿ã
ããã±ãŒãžã€ã³ã¹ããŒã«ã®äŸãšããŠãApacheã䜿ã£ãŠã¿ãŸãããã
ãŸãã¯ã€ã³ã¹ããŒã«ã
$ sudo apt install apache2
ãšããã§Apacheãã€ã³ã¹ããŒã«ããŠãããšsystemctl enable
ã®ãã°ããããã®ãåºãŠããŸããããã®æã®ã·ã³ããªãã¯ãªã³ã¯
äœæå
ã¯/lib/systemd/system
ãšãªã£ãŠããŸãã
Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service â /lib/systemd/system/apache2.service. Created symlink /etc/systemd/system/multi-user.target.wants/apache-htcacheclean.service â /lib/systemd/system/apache-htcacheclean.service.
Ubuntu Linuxã®å Žåã ãš/usr/lib/systemd/system
ãã£ã¬ã¯ããªã§ã¯ãªãã/lib/systemd/system
ãã£ã¬ã¯ããªãèŠãããã§ãã
第598回 systemdユニットの設定を変える:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
ãšãã£ãŠãã/lib
ãã£ã¬ã¯ããªã確èªãããš/usr/lib
ãã£ã¬ã¯ããªã«ãªã³ã¯ãããŠããã ããªã®ã§ãçµå±ã®ãšãã
/usr/lib/systemd/system
ãã£ã¬ã¯ããªã«ãã¡ã€ã«ã¯ããããã§ããã
$ ll /lib lrwxrwxrwx 1 root root 7 May 26 19:39 /lib -> usr/lib/ $ ll /usr/lib/systemd/system/apache2.service -rw-r--r-- 1 root root 395 Apr 13 2020 /usr/lib/systemd/system/apache2.service
ã¹ããŒã¿ã¹ã確èªããŠã¿ãŸãã
$ systemctl status apache2 â apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-06-06 10:47:38 UTC; 8min ago Docs: https://httpd.apache.org/docs/2.4/ Main PID: 1641 (apache2) Tasks: 55 (limit: 2280) Memory: 5.5M CGroup: /system.slice/apache2.service ââ1641 /usr/sbin/apache2 -k start ââ1642 /usr/sbin/apache2 -k start ââ1643 /usr/sbin/apache2 -k start Jun 06 10:47:38 ubuntu2004.localdomain systemd[1]: Starting The Apache HTTP Server... Jun 06 10:47:38 ubuntu2004.localdomain apachectl[1640]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using ubuntu2004.localdomain. Set> Jun 06 10:47:38 ubuntu2004.localdomain systemd[1]: Started The Apache HTTP Server.
ä»åãããã§è¡šç€ºãããŠããDescriptionã®The Apache HTTP Server
ãæžãæããŠãã«ã¹ã¿ãã€ãºããŠã¿ãŸãããã
ãŸãã¯ã/usr/lib/systemd/system
ãã/etc/systemd/system
ãžãŠãããå®çŸ©ãã¡ã€ã«ãã³ããŒã
$ sudo cp /usr/lib/systemd/system/apache2.service /etc/systemd/system/apache2.service
ãŠãããå®çŸ©ãã¡ã€ã«ã®ãDescriptionãå€æŽããŸãã
/etc/systemd/system/apache2.service
[Unit] Description=The Apache HTTP Server(Customized) After=network.target remote-fs.target nss-lookup.target Documentation=https://httpd.apache.org/docs/2.4/ [Service] Type=forking Environment=APACHE_STARTED_BY_SYSTEMD=true ExecStart=/usr/sbin/apachectl start ExecStop=/usr/sbin/apachectl stop ExecReload=/usr/sbin/apachectl graceful PrivateTmp=true Restart=on-abort [Install] WantedBy=multi-user.target
ãããŠãsystemctl daemon-reload
ãå®è¡ã
$ sudo systemctl daemon-reload
systemctl status
ãèŠããšãããŒããããŠãããŠãããå®çŸ©ãã¡ã€ã«ãå€æŽãããŠããããšãšãDescriptionã®å€æŽã
åæ ãããŠããããšã確èªã§ããŸãã
$ systemctl status apache2 â apache2.service - The Apache HTTP Server(Customize) Loaded: loaded (/etc/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-06-06 11:04:18 UTC; 38s ago Docs: https://httpd.apache.org/docs/2.4/ Main PID: 3081 (apache2) Tasks: 55 (limit: 2280) Memory: 5.2M CGroup: /system.slice/apache2.service ââ3081 /usr/sbin/apache2 -k start ââ3082 /usr/sbin/apache2 -k start ââ3083 /usr/sbin/apache2 -k start Jun 06 11:04:18 ubuntu2004.localdomain systemd[1]: Starting The Apache HTTP Server... Jun 06 11:04:18 ubuntu2004.localdomain apachectl[3064]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using ubuntu2004.localdomain. Set> Jun 06 11:04:18 ubuntu2004.localdomain systemd[1]: Started The Apache HTTP Server.
ã¡ãªã¿ã«ã/etc/systemd/system/multi-user.target.wants
ããåç
§ãããŠããã®ã¯ã/lib/systemd/system
ããå®ã¯å€ãã£ãŠ
ããªãã£ããããŸãã
$ ll /etc/systemd/system/multi-user.target.wants/apache2.service lrwxrwxrwx 1 root root 35 Jun 6 11:03 /etc/systemd/system/multi-user.target.wants/apache2.service -> /lib/systemd/system/apache2.service
ã¡ãã£ãšäžæè°ãªæãã¯ããŸãããsystemctl daemon-reload
ã§åæ ããããã§åã£ãŠã¯ããã¿ããã§ãã
ããã§systemctl enable
ãå®è¡ãããšãã·ã³ããªãã¯ãªã³ã¯ã貌ãæ¿ããŠãããŸãã
$ sudo systemctl enable apache2 Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable apache2 Removed /etc/systemd/system/multi-user.target.wants/apache2.service. Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service â /etc/systemd/system/apache2.service.
ãããŸã§ãã£ãæ¹ãããã®ã§ããããïŒ
$ systemctl status apache2 â apache2.service - The Apache HTTP Server(Customize) Loaded: loaded (/etc/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-06-06 11:07:09 UTC; 6min ago Docs: https://httpd.apache.org/docs/2.4/ Main PID: 670 (apache2) Tasks: 55 (limit: 2280) Memory: 8.0M CGroup: /system.slice/apache2.service ââ670 /usr/sbin/apache2 -k start ââ671 /usr/sbin/apache2 -k start ââ672 /usr/sbin/apache2 -k start Jun 06 11:07:09 ubuntu2004.localdomain systemd[1]: Starting The Apache HTTP Server(Customize)... Jun 06 11:07:09 ubuntu2004.localdomain apachectl[654]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using ubuntu2004.localdomain. Set > Jun 06 11:07:09 ubuntu2004.localdomain systemd[1]: Started The Apache HTTP Server(Customize).
ç¬èªã®ãŠãããå®çŸ©ãã¡ã€ã«ãäœæãã
æåŸã«ãèªåã§ãŠãããå®çŸ©ãã¡ã€ã«ãäœæããŠã¿ãŸãã
ãé¡ã¯ãPrometheusã«ããŸãããã
Prometheusçšã®ãŠãŒã¶ãŒãäœæã
$ sudo useradd -r prometheus
ã€ã³ã¹ããŒã«å
ã¯ã/opt/prometheus
ã«ããŸãããã
$ cd /opt $ sudo curl -OLs https://github.com/prometheus/prometheus/releases/download/v2.27.1/prometheus-2.27.1.linux-amd64.tar.gz $ sudo tar xf prometheus-2.27.1.linux-amd64.tar.gz $ sudo mv prometheus-2.27.1.linux-amd64 prometheus $ sudo chown -R prometheus.prometheus prometheus
ããŒã¿ä¿åçšã®ãã£ã¬ã¯ããªãäœæã
$ sudo mkdir -p /var/lib/prometheus $ sudo chown prometheus.prometheus /var/lib/prometheus
Prometheusçšã®ãŠãããå®çŸ©ãã¡ã€ã«ãäœæã
/etc/systemd/system/prometheus.service
[Unit] Description=Prometheus - systems monitoring and alerting toolkit Documentation=https://prometheus.io/docs/ After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/data ExecReload=/bin/kill -HUP $MAINPID User=prometheus [Install] WantedBy=multi-user.target
systemdã®ãµãŒãã¹ãšããŠãæå¹åã
$ sudo systemctl enable prometheus Created symlink /etc/systemd/system/multi-user.target.wants/prometheus.service â /etc/systemd/system/prometheus.service.
èµ·åã
$ sudo systemctl start prometheus
確èªã
$ sudo systemctl status prometheus â prometheus.service - Prometheus - systems monitoring and alerting toolkit Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-06-06 11:57:57 UTC; 13s ago Docs: https://prometheus.io/docs/ Main PID: 5399 (prometheus) Tasks: 7 (limit: 2280) Memory: 18.7M CGroup: /system.slice/prometheus.service ââ5399 /opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/data Jun 06 11:57:58 ubuntu2004.localdomain prometheus[5399]: level=info ts=2021-06-06T11:57:58.047Z caller=head.go:755 component=tsdb msg="On-disk memory mappable chunks replay compl> Jun 06 11:57:58 ubuntu2004.localdomain prometheus[5399]: level=info ts=2021-06-06T11:57:58.047Z caller=head.go:761 component=tsdb msg="Replaying WAL, this may take a while" Jun 06 11:57:58 ubuntu2004.localdomain prometheus[5399]: level=info ts=2021-06-06T11:57:58.052Z caller=head.go:813 component=tsdb msg="WAL segment loaded" segment=0 maxSegment=1 Jun 06 11:57:58 ubuntu2004.localdomain prometheus[5399]: level=info ts=2021-06-06T11:57:58.053Z caller=head.go:813 component=tsdb msg="WAL segment loaded" segment=1 maxSegment=1 Jun 06 11:57:58 ubuntu2004.localdomain prometheus[5399]: level=info ts=2021-06-06T11:57:58.053Z caller=head.go:818 component=tsdb msg="WAL replay completed" checkpoint_replay_dur> Jun 06 11:57:58 ubuntu2004.localdomain prometheus[5399]: level=info ts=2021-06-06T11:57:58.054Z caller=main.go:828 fs_type=EXT4_SUPER_MAGIC Jun 06 11:57:58 ubuntu2004.localdomain prometheus[5399]: level=info ts=2021-06-06T11:57:58.054Z caller=main.go:831 msg="TSDB started" Jun 06 11:57:58 ubuntu2004.localdomain prometheus[5399]: level=info ts=2021-06-06T11:57:58.054Z caller=main.go:957 msg="Loading configuration file" filename=/opt/prometheus/prome> Jun 06 11:57:58 ubuntu2004.localdomain prometheus[5399]: level=info ts=2021-06-06T11:57:58.055Z caller=main.go:988 msg="Completed loading of configuration file" filename=/opt/pro> Jun 06 11:57:58 ubuntu2004.localdomain prometheus[5399]: level=info ts=2021-06-06T11:57:58.055Z caller=main.go:775 msg="Server is ready to receive web requests."
ãªããšãªãããªããŒãã察å¿ããŠãããŸããã
$ sudo systemctl reload prometheus
åæ¢ã
$ sudo systemctl stop prometheus
ãããªãšããã§ããããã
ãŸãšã
systemdã®ãŠãããå®çŸ©ãã¡ã€ã«ã®çœ®ãå ŽæããããããŠèª¿ã¹çŽããŠããŸãšããŠãããŸããã
ãã€ãé°å²æ°ã§èŠãŠããæ°ãããã®ã§ãããããæ©äŒãè¯ãããªããšã