システム起動後30分ごとにスクリプトを実行したいと思います。 cronを使用できることを知っていますが、この機能を頻繁に使用する予定はないので、systemdで試したいと思いました。
これまで、私は何かを一度だけ実行できる単調なタイマーだけを見つけました(少なくとも私の考えではそうです)。起動/システム起動から30分ごとに何かをしたい場合とはどうなりますかfoo.timer
?[email protected]
[Unit]
Description=run foo
Wants=foo.timer
[Service]
User=%I
Type=simple
ExecStart=/bin/bash /home/user/script.sh
foo.timer
[Unit]
Description=run foo
[Timer]
where I am stuck... ???
答え1
2つのファイルを生成する必要があります。 1つはサービス用、もう1つは同じ名前のタイマー用です。
例:
/etc/systemd/system/test.service
[Unit]
Description=test job
[Service]
Type=oneshot
ExecStart=/bin/bash /tmp/1.sh
/etc/systemd/system/test.timer
[Unit]
Description=test
[Timer]
OnUnitActiveSec=10s
OnBootSec=10s
[Install]
WantedBy=timers.target
次に、コマンドを使用してsystemdを再ロードsystemctl daemon-reload
し、タイマーを起動するsystemctl start test.timer
か、デフォルトで有効にします(systemctl enable test.timer
)。
テスト内容は1.sh
#!/bin/bash
echo `date` >> /tmp/2
そして、このコマンドは利用可能なすべてのタイマーをチェックします。
systemctl list-timers --all
プロジェクトの詳細ページそしての例アーチLinuxページ
答え2
タイマーを使用しない代替方法は次のとおりです。時間があまり重要ではなく、スクリプトの実行に時間がかからない単純な作業には適しています。
[Unit]
Description=Run foo
[Service]
User=%I
Restart=always
RestartSec=1800s
ExecStart=/bin/bash /home/user/script.sh
答え3
正しいアプローチは、systemd-run
自分で定義する必要なく作業スケジュールを計画できる単位を使用することです。
カレンダーまたは期間別に予約できます。 MYSELFがアプリケーションのフルパスであると仮定します。
systemd-run --user --on-calendar '*:0/1' ${MYSELF} <args>