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
エラーメッセージは既に答えを(部分的に)提供しています。サービスには[Install]セクションがあります。そこにある唯一のオプションは「WantedBy =」です。サービスを有効にするには、ターゲットがそのサービスを必要としている必要があります。
例:NetworkManagerには「WantedBy = network.target」があるため、NetworkManagerを有効にすると、network.targetにグループ化され、systemdがnetwork.targetを開始するとすぐに開始されます
SysV-initのランレベルのように考えると、デーモンをランレベルに挿入する必要があります。それ以外の場合...いつ開始する必要がありますか?
安全なデフォルトでは、「WantedBy = multi-user.target」を設定します。これが最後に開始されるものです。