なぜ TIMER を SERVICE に変換するのですか?
systemd において、これらは1つのジョブの2つの側面です。.timer は「いつ」を指定し、.SERVICE は「何を」を指定します。したがって、現実的なタスクは変換ではなく、デフォルトの名前の一致または Unit= ディレクティブを介してタイマーがトリガーする、対応するサービスユニットを記述することです。
TIMER から SERVICE への変換方法
任意のテキストエディタ FREE
同じベース名を持つファイル(例:backup.timer の隣に backup.service)を作成し、ExecStart= にコマンドを設定した [Service] セクションを追加します。タイマーは名前によって自動的にそれをトリガーします。
systemctl edit FREE
systemctl edit --full --force backup.service を実行して正しいディレクトリに新しいユニットを開き、ExecStart= を定義してから、systemctl daemon-reload を実行してタイマーを有効にします。
これらの形式について
.timerファイルは、Linuxにおいて別のユニット(通常は対応する.serviceファイル)の実行スケジュールを管理するsystemdユニットであり、cronに代わる現代的な仕組みです。INI形式の小さなプレーンテキストファイルであるため、nano、vim、VS…
.TIMER の詳細を開く →.SERVICE ファイルは、system ファイルである Mac OS X Service Application に関連付けられています。
.SERVICE の詳細を開く →品質と注意点
- デフォルトでは
backup.timerはbackup.serviceをアクティブにします。サービス名が異なる場合にのみ、タイマーの[Timer]セクションでUnit=を使用してください。 - スケジュールされたタスクの場合、systemd が各実行を個別のジョブとして処理するように、サービスは通常
Type=oneshotである必要があります。 - ユニットを作成または変更した後は、
systemctl daemon-reloadを実行してください。そうしないと、タイマーは新しいサービスを認識しません。
よくある質問
サービスなしでタイマーを実行できますか?
.service ユニットをアクティブにする必要があります。タイマーはどのサービスを実行するかをどのようにして知るのですか?
Unit= を使用して上書きしない限り、ベース名の一致(foo.timer は foo.service を実行)によって判断されます。タイマーとサービスのどちらを有効にしますか?
.timer を有効にして開始します。systemd がスケジュールに従ってサービスを開始します。これらのユニットファイルはどこにありますか?
/etc/systemd/system/ にあります。編集後は systemctl daemon-reload を実行してください。