期待どおりに機能するシステムユーザーサービスがあります。次のように始まります。
systemctl start test@user
問題は、複数のユーザーのためにタイマーでこのサービスを実行する必要があることです。タイマー自体でユーザーを指定したり、@記号を使用してユーザー名を渡す方法はないようです。
タイマーは次のとおりです。
[Unit]
Description=Test (runs once every 24 hours)
[Timer]
OnUnitActiveSec=24h
Persistent=true
[email protected]
[Install]
WantedBy=timers.target
私を混乱させるのは、「Unit =」に何を入れるべきですか? 「と入力すると[Eメール保護]「動作しますが、常にシングルユーザーとして実行されるため、マルチユーザーサービスは利用できません。」[Eメール保護]"はタイマーを起動しますが、"systemctl status test@user"は、タイマーが1分間隔に設定されていても常に非アクティブであることを示します。
特定のシステムサービスの実行中のすべてのインスタンスを一覧表示する方法がわからないため、タイマーが「@user」なしでサービスを実行すると、「test @」サービスが別のユーザーとして実行されているかどうかはわかりません。
タイマーを使用してユーザーサービスを開始する正しい方法は何ですか?理想的には、ユーザーは自分のサービスとそのサービスに関連するタイマーを作成して管理できる必要があります。
答え1
これはあなたの要件を満たしていますか?
systemctl --user start unit.service
答え2
次のようにタイマー内でサービスを開始してみてください。
Unit=test@%u.service
sytemd.unit(5)
指定子のマンページから%u
:
Service Managerインスタンスを実行しているユーザーの名前。システム管理者の場合は「root」と確認されます。この設定は、サービスユニットで構成可能な項目の影響を受けません。