[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/openresty/nginx/logs/nginx.pid
\# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
\# SELinux context. This might happen when running `nginx -t` from the cmdline.
\# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /usr/local/openresty/nginx/logs/nginx.pid
ExecStartPre=/usr/local/openresty/nginx/sbin/nginx -t
ExecStart=/usr/local/openresty/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target
解讀
Systemed 默認目錄在 /etc/systemd/system/
但是里面存放的都是符號鏈接棱烂,指向目錄 /usr/lib/systemd/system/
真正的配置文件在這個目錄里面
systemctl enable
命令用于打開服務,在兩個目錄之間建立符號鏈接關系辩撑。 相當于激活開機啟動
配置文件分成幾個區(qū)塊,每個區(qū)塊的第一行纬向,是用方括號表示的區(qū)別名燕偶,比如 [Unit] 。配置文件的區(qū)塊名和字段名汰现,都是大小寫敏感的。鍵值對的等號兩側不能有空格二拐。
配置文件的區(qū)塊
[Unit] 區(qū)塊通常是配置文件的第一個區(qū)塊服鹅,用來定義 Unit 的元數據凳兵,以及配置與其他 Unit 的關系百新。它的主要字段如下。
Description:簡短描述
Documentation:文檔地址
Requires:當前 Unit 依賴的其他 Unit庐扫,如果它們沒有運行饭望,當前 Unit 會啟動失敗
Wants:與當前 Unit 配合的其他 Unit,如果它們沒有運行形庭,當前 Unit 不會啟動失敗
BindsTo:與Requires類似铅辞,它指定的 Unit 如果退出,會導致當前 Unit 停止運行
Before:如果該字段指定的 Unit 也要啟動萨醒,那么必須在當前 Unit 之后啟動
After:如果該字段指定的 Unit 也要啟動斟珊,那么必須在當前 Unit 之前啟動
Conflicts:這里指定的 Unit 不能與當前 Unit 同時運行
Condition...:當前 Unit 運行必須滿足的條件,否則不會運行
Assert...:當前 Unit 運行必須滿足的條件富纸,否則會報啟動失敗
[Install] 通常是配置文件的最后一個區(qū)塊囤踩,用來定義如何啟動,以及是否開機啟動晓褪。它的主要字段如下堵漱。
WantedBy:它的值是一個或多個 Target,當前 Unit 激活時(enable)符號鏈接會放入/etc/systemd/system目錄下面以 Target 名 + .wants后綴構成的子目錄中
RequiredBy:它的值是一個或多個 Target涣仿,當前 Unit 激活時勤庐,符號鏈接會放入/etc/systemd/system目錄下面以 Target 名 + .required后綴構成的子目錄中
Alias:當前 Unit 可用于啟動的別名
Also:當前 Unit 激活(enable)時,會被同時激活的其他 Unit
[Service] 區(qū)塊用來 Service 的配置好港,只有 Service 類型的 Unit 才有這個區(qū)塊愉镰。它的主要字段如下。
Type:定義啟動時的進程行為钧汹。它有以下幾種值丈探。
Type=simple:默認值,執(zhí)行ExecStart指定的命令崭孤,啟動主進程
Type=forking:以 fork 方式從父進程創(chuàng)建子進程类嗤,創(chuàng)建后父進程會立即退出
Type=oneshot:一次性進程糊肠,Systemd 會等當前服務退出,再繼續(xù)往下執(zhí)行
Type=dbus:當前服務通過D-Bus啟動
Type=notify:當前服務啟動完畢遗锣,會通知Systemd货裹,再繼續(xù)往下執(zhí)行
Type=idle:若有其他任務執(zhí)行完畢,當前服務才會運行
ExecStart:啟動當前服務的命令
ExecStartPre:啟動當前服務之前執(zhí)行的命令
ExecStartPost:啟動當前服務之后執(zhí)行的命令
ExecReload:重啟當前服務時執(zhí)行的命令
ExecStop:停止當前服務時執(zhí)行的命令
ExecStopPost:停止當其服務之后執(zhí)行的命令
RestartSec:自動重啟當前服務間隔的秒數
Restart:定義何種情況 Systemd 會自動重啟當前服務精偿,可能的值包括always(總是重啟)弧圆、on-success、on-failure笔咽、on-abnormal搔预、on-abort、on-watchdog
TimeoutSec:定義 Systemd 停止當前服務之前等待的秒數
Environment:指定環(huán)境變量
Unit 配置文件的完整字段清單叶组,請參考官方文檔拯田。
systemd-analyze
# 查看啟動耗時
$ systemd-analyze
# 查看每個服務的啟動耗時
$ systemd-analyze blame
# 顯示瀑布狀的啟動過程流
$ systemd-analyze critical-chain
# 顯示指定服務的啟動流
$ systemd-analyze critical-chain atd.service
hostnamectl
# 顯示當前主機的信息
$ hostnamectl
# 設置主機名。
$ sudo hostnamectl set-hostname rhel7
localectl 查看本地化設置
# 查看本地化設置
$ localectl
# 設置本地化參數甩十。
$ sudo localectl set-locale LANG=en_GB.utf8
$ sudo localectl set-keymap en_GB
timedatectl 查看當前的時區(qū)設置船庇。
# 查看當前時區(qū)設置
$ timedatectl
# 顯示所有可用的時區(qū)
$ timedatectl list-timezones
# 設置當前時區(qū)
$ sudo timedatectl set-timezone America/New_York
$ sudo timedatectl set-time YYYY-MM-DD
$ sudo timedatectl set-time HH:MM:SS
systemctl list-units 查看系統(tǒng)狀態(tài)和單個 Unit 的狀態(tài)。
# 顯示系統(tǒng)狀態(tài)
$ systemctl status
# 顯示單個 Unit 的狀態(tài)
$ sysystemctl status bluetooth.service
# 顯示遠程主機的某個 Unit 的狀態(tài)
$ systemctl -H root@rhel7.example.com status httpd.service
Unit 管理
# 顯示某個 Unit 是否正在運行
$ systemctl is-active application.service
# 顯示某個 Unit 是否處于啟動失敗狀態(tài)
$ systemctl is-failed application.service
# 顯示某個 Unit 服務是否建立了啟動鏈接
$ systemctl is-enabled application.service
# 立即啟動一個服務
$ sudo systemctl start apache.service
# 立即停止一個服務
$ sudo systemctl stop apache.service
# 重啟一個服務
$ sudo systemctl restart apache.service
# 殺死一個服務的所有子進程
$ sudo systemctl kill apache.service
# 重新加載一個服務的配置文件
$ sudo systemctl reload apache.service
# 重載所有修改過的配置文件
$ sudo systemctl daemon-reload
# 顯示某個 Unit 的所有底層參數
$ systemctl show httpd.service
# 顯示某個 Unit 的指定屬性的值
$ systemctl show -p CPUShares httpd.service
# 設置某個 Unit 的指定屬性
$ sudo systemctl set-property httpd.service CPUShares=500