Fedora
為什麼我的 systemd 使用者單元在啟動時不啟動?
我正在嘗試創建一個 systemd 使用者單元並在系統啟動時啟動它。該服務確實手動啟動,但它不會在啟動時啟動。
通過搜尋網際網路,我了解到為了讓使用者單元在啟動時啟動,我應該需要執行
loginctl enable-linger <username>
,但這似乎根本沒有任何效果。事實上,手冊頁說:Enable/disable user lingering for one or more users. If enabled for a specific user, a user manager is spawned for the user at boot and kept around after logouts. This allows users who are not logged in to run long-running services.
儘管執行了這個命令,我的服務並沒有在啟動時啟動。
loginctl enable-linger error
那個單位:
$ cat ~/.config/systemd/user/thin\@.service [Unit] Description=A fast and very simple Ruby web server [Service] Type=simple EnvironmentFile=/home/error/.config/thin/%i ExecStart=/usr/bin/bash /home/error/.rvm/wrappers/%i/thin start -a $THIN_BIND -p $THIN_PORT WorkingDirectory=/srv/www/%i PrivateTmp=true [Install] WantedBy=multi-user.target
當我重新啟動時,它沒有執行:
$ systemctl --user status thin@redmine -l ● thin@redmine.service - A fast and very simple Ruby web server Loaded: loaded (/home/error/.config/systemd/user/thin@.service; enabled; vendor preset: enabled) Active: inactive (dead) # systemctl status user@1000 -l ● user@1000.service - User Manager for UID 1000 Loaded: loaded (/usr/lib/systemd/system/user@.service; static; vendor preset: disabled) Active: active (running) since Wed 2015-12-23 19:43:27 GMT; 13s ago Main PID: 613 (systemd) Status: "Startup finished in 38ms." CGroup: /user.slice/user-1000.slice/user@1000.service ├─613 /usr/lib/systemd/systemd --user └─615 (sd-pam) Dec 23 19:43:27 redmine systemd[613]: Reached target Sockets. Dec 23 19:43:27 redmine systemd[613]: Starting Sockets. Dec 23 19:43:27 redmine systemd[613]: Reached target Timers. Dec 23 19:43:27 redmine systemd[613]: Starting Timers. Dec 23 19:43:27 redmine systemd[613]: Reached target Basic System. Dec 23 19:43:27 redmine systemd[613]: Starting Basic System. Dec 23 19:43:27 redmine systemd[613]: Reached target Default. Dec 23 19:43:27 redmine systemd[613]: Startup finished in 38ms. Dec 23 19:43:27 redmine systemd[613]: Starting Default. Dec 23 19:43:27 redmine systemd[1]: Started User Manager for UID 1000.
我可以手動啟動它,它可以工作:
$ systemctl --user start thin@redmine $ systemctl --user status thin@redmine -l ● thin@redmine.service - A fast and very simple Ruby web server Loaded: loaded (/home/error/.config/systemd/user/thin@.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2015-12-23 19:43:50 GMT; 5s ago Main PID: 1265 (ruby) CGroup: /user.slice/user-1000.slice/user@1000.service/thin.slice/thin@redmine.service └─1265 ruby /home/error/.rvm/gems/ruby-2.2.1@redmine/bin/thin start -a ::1 -p 8008 Dec 23 19:43:50 redmine systemd[613]: Started A fast and very simple Ruby web server. Dec 23 19:43:50 redmine systemd[613]: Starting A fast and very simple Ruby web server... Dec 23 19:43:52 redmine bash[1265]: /home/error/.rvm/gems/ruby-2.2.1@redmine/gems/htmlentities-4.3.1/lib/htmlentities/mappings/expanded.rb:465: warning: duplicated key at line 466 ignored: "inodot" # systemctl status user@1000 -l ● user@1000.service - User Manager for UID 1000 Loaded: loaded (/usr/lib/systemd/system/user@.service; static; vendor preset: disabled) Active: active (running) since Wed 2015-12-23 19:43:27 GMT; 40s ago Main PID: 613 (systemd) Status: "Startup finished in 38ms." CGroup: /user.slice/user-1000.slice/user@1000.service ├─613 /usr/lib/systemd/systemd --user ├─615 (sd-pam) └─thin.slice └─thin@redmine.service └─1265 ruby /home/error/.rvm/gems/ruby-2.2.1@redmine/bin/thin start -a ::1 -p 8008 Dec 23 19:43:27 redmine systemd[613]: Startup finished in 38ms. Dec 23 19:43:27 redmine systemd[613]: Starting Default. Dec 23 19:43:27 redmine systemd[1]: Started User Manager for UID 1000. Dec 23 19:43:50 redmine systemd[613]: Created slice -.slice. Dec 23 19:43:50 redmine systemd[613]: Starting -.slice. Dec 23 19:43:50 redmine systemd[613]: Created slice thin.slice. Dec 23 19:43:50 redmine systemd[613]: Starting thin.slice. Dec 23 19:43:50 redmine systemd[613]: Started A fast and very simple Ruby web server. Dec 23 19:43:50 redmine systemd[613]: Starting A fast and very simple Ruby web server... Dec 23 19:43:52 redmine bash[1265]: /home/error/.rvm/gems/ruby-2.2.1@redmine/gems/htmlentities-4.3.1/lib/htmlentities/mappings/expanded.rb:465: warning: duplicated key at line 466 ignored: "inodot"
我如何弄清楚為什麼該服務沒有在啟動時啟動,並讓它這樣做?
作業系統是 Fedora 23 x86_64,systemd 222-10。
我自己想出來的數字。
線索就在這裡,在使用者服務輸出中:
Dec 23 19:43:27 redmine systemd[613]: Reached target Default.
我的單位要求載入
multi-user.target
,但使用者 systemd 中沒有這樣的目標。我將其更改為
default.target
在單元文件中,禁用並重新啟用該服務,它現在在啟動時啟動。[Install] WantedBy=default.target
進而
$ systemctl --user disable thin@redmine Removed symlink /home/error/.config/systemd/user/multi-user.target.wants/thin@redmine.service. $ systemctl --user daemon-reload $ systemctl --user enable thin@redmine Created symlink from /home/error/.config/systemd/user/default.target.wants/thin@redmine.service to /home/error/.config/systemd/user/thin@.service.