web-dev-qa-db-ja.com

PCの起動時にArchのサービスが開始されない

Arch Linuxを実行しています。次の説明がある/etc/systemd/system/でサービスを利用しています

[Unit]
After=network.target

[Service]
Type=simple
ExecStart=(...)service.py
ExecReload=(...)service.py
Restart=always

ネットワーク接続に依存するため、ネットワーク確立後に起動するように設定しました。

PCを起動すると、サービスが常に非アクティブになります。手動で起動すると、完全に実行されます。内部エラーが発生した場合も再起動します。起動時に起動しないのはなぜですか?

[〜#〜]編集[〜#〜]

サービスを有効にすると、次のメッセージが表示されます。

➜ ~ systemctl enable py_service.service
The unit files have no installation config (WantedBy, RequiredBy, Also, Alias settings in the [Install] section, and DefaultInstance for template units). This means they are not meant to be enabled using systemctl. Possible reasons for having this kind of units are: 1) A unit may be statically enabled by being symlinked from another unit's .wants/ or .requires/ directory. 2) A unit's purpose may be to act as a helper for some other unit which has a requirement dependency on it. 3) A unit may be started when needed via activation (socket, path, timer, D-Bus, udev, scripted systemctl call, ...). 4) In case of template units, the unit is meant to be enabled with some instance name specified.

1)シンボリックリンクされていない

2)ヘルパーではない

3)これはAfter=network...でカバーされると思いました

4)どういう意味かわかりません

編集2 @dustballの提案に従って、次のように編集しました。

cat /etc/systemd/system/py_service.service 
[Install]
WantedBy=multi-user.target

[Unit]
After=network.target

[Service]
Type=simple
ExecStart=(...)service.py
ExecReload=(...)service.py
Restart=always

しかし、起動時に開始されませんでした:(

編集上記の設定は機能します。有効にするのを忘れました(@Daniel Hに感謝)を使用してサービスを再ロードします

Sudo systemctl daemon-reload

そしてそれを使用してそれを有効にします

systemctl enable py_service.service
8
Camandros

エラーメッセージは既に答えを(部分的に)提供しています。サービスには[Install]セクションがあります。そこにある唯一のオプションは「WantedBy =」です。サービスを有効にするには、ターゲットがそのサービスを必要としている必要があります。

例:NetworkManagerには「WantedBy = network.target」があるため、NetworkManagerを有効にすると、network.targetにグループ化され、systemdがnetwork.targetを開始するとすぐに開始されます

SysV-initのランレベルのように考えると、デーモンをランレベルに挿入する必要があります。それ以外の場合...いつ開始する必要がありますか?

安全なデフォルトでは、「WantedBy = multi-user.target」を設定します。これが最後に開始されるものです。

15
dustball