システムタイマーは、サービスが停止した場合にのみ起動されます。

システムタイマーは、サービスが停止した場合にのみ起動されます。

Pythonスクリプトを実行するサービスがあります。

[Unit]
Description="Daily python service"

[Service]
WorkingDirectory=/home/ubuntu/python_project/
ExecStartPre=/bin/bash -c 'truncate -s 0 /var/log/project.log /var/log/project_error.log'
ExecStart=/home/ubuntu/.conda/envs/test/bin/python -u main.py
StandardOutput=append:/var/log/project.log
StandardError=append:/var/log/project_error.log

[Install]
WantedBy=multi-user.target

毎日特定の時間に実行したいです。

[Unit]
Description=Run service daily

[Timer]
OnCalendar=*-*-* 12:00:00
Persistent=true

[Install]
WantedBy=timers.target

デーモンを再ロードし、タイマーをアクティブにしてタイマーを起動すると、最初の日に実行されます。ただし、最初の日以降は、サービスを手動で停止しない限り、自動的に実行が停止します。

なぜこれが起こるのですか?この問題をどのように解決できますか?

答え1

以下は、同様の操作を実行する方法の例です。この例では毎時サービスを呼び出すため、必要に応じてサービスを調整します。

/etc/systemd/system/btrfsbk.service

[Unit]
Description=Create mirror of current state of all BTRFS snapshots

[Service]
Type=simple
ExecStart=/usr/local/sbin/btrfsbk

/etc/systemd/system/btrfsbk.timer

[Unit]
Description=Create mirror of current state of all BTRFS snapshots

[Timer]
Unit=btrfsbk.service
OnBootSec=15min
OnUnitActiveSec=60min
AccuracySec=1us
Persistent=True

[Install]
WantedBy=timers.target

私の.serviceファイルに[Install]セクションはありません。この機能はタイマーによって有効になるため、有効にする必要はありません。

他の例については、以下を確認してください。一流サービス/タイマーファイル。

関連情報