24.5. systemd ユニットファイルを使用した次回ブート時のジョブの実行スケジュール
cron、anacron、at、batch ユーティリティーを使うと、特定の時間に、またはシステム負荷が特定のレベルに達したときに、ジョブを実行するように設定できます。また、次回のシステムブート時に実行するジョブを作成することもできます。これは、実行するスクリプトとその依存関係を指定する systemd ユニットファイルを作成することで行います。
次回の起動時に実行するスクリプトを設定するには、以下を実行します。
起動プロセスのどの段階でスクリプトを実行するかを指定する
systemdユニットファイルを作成します。この例で挙げているのは、Wants=とAfter=の合理的な一連の依存関係を備えたユニットファイルです。~]# cat /etc/systemd/system/one-time.service [Unit] # The script needs to execute after: # network interfaces are configured Wants=network-online.target After=network-online.target # all remote filesystems (NFS/_netdev) are mounted After=remote-fs.target # name (DNS) and user resolution from remote databases (AD/LDAP) are available After=nss-user-lookup.target nss-lookup.target # the system clock has synchronized After=time-sync.target [Service] Type=oneshot ExecStart=/usr/local/bin/foobar.sh [Install] WantedBy=multi-user.targetこの例を使用すると、以下が可能となります。
-
/usr/local/bin/foobar.shを、自分のスクリプトの名前に置き換えます。 必要に応じて
After=エントリーのセットを変更します。起動プロセスの段階を指定する方法は 「systemd のユニットファイルの作成および変更」 を参照してください。
-
スクリプトの実行後も
systemdサービスをアクティブに維持したいときは、RemainAfterExit=yes行を[Service]セクションに追加します。[Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/local/bin/foobar.shsystemdデーモンをリロードします。~]# systemctl daemon-reloadsystemdサービスを有効にします。~]# systemctl enable one-time.service以下を実行するスクリプトを作成します。
~]# cat /usr/local/bin/foobar.sh #!/bin/bash touch /root/test_fileスクリプトを次回のブート時のみに実行したいときは、
systemdユニットを無効にする行を追加します。#!/bin/bash touch /root/test_file systemctl disable one-time.serviceスクリプトを実行可能にします。
~]# chmod +x /usr/local/bin/foobar.sh