Debian
Systemd 的RequiredBy 指令被忽略
這是我的服務文件:
[Unit] Description=Blabla service Requires=network-online.target nfs-common.service After=network-online.target nfs-common.service [Service] Type=oneshot ExecStart=/path/to/script RemainAfterExit=no [Install] RequiredBy=php5-fpm.service apache2.service nginx.service
啟用時看起來很有希望:
# systemctl enable blabla.service Created symlink from /etc/systemd/system/php5-fpm.service.requires/blabla.service to /etc/systemd/system/blabla.service. Created symlink from /etc/systemd/system/apache2.service.requires/blabla.service to /etc/systemd/system/blabla.service. Created symlink from /etc/systemd/system/nginx.service.requires/blabla.service to /etc/systemd/system/blabla.service.
然後在重新啟動後
systemd-analyze
給我以下資訊:# systemd-analyze blame 18.434s blabla.service 5.942s cloud-init.service 2.766s networking.service 1.671s apache2.service 1.398s cloud-init-local.service 1.276s newrelic-sysmond.service 856ms php5-fpm.service 586ms nginx.service .....
根據文件
Type=oneshot
:oneshot 的行為類似於 simple;但是,預計該程序必須在 systemd 啟動後續單元之前退出。
有任何想法嗎?
RequiredBy=
並不意味著一個服務應該一個接一個地啟動。在
man systemd.unit
,文件RequiredBy=
說:主要結果是目前單元將在列出的單元啟動時啟動。
換句話說,它們最終可能會並行啟動。我認為您希望
Before=
在安裝部分中有一個指令。中的文件man systemd.unit
有這樣的說法Before=
:如果一個單元 foo.service 包含設置 Before=bar.service 並且兩個單元都正在啟動,則 bar.service 的啟動將延遲到 foo.service 啟動。請注意,此設置獨立於 Requires= 配置的需求依賴關係並與之正交。