VMware ESXi 6.7 に cron を設定する

こんにちは、じんないです。

今回は VMware ESXi 6.7 で cron を設定し、例として仮想マシンのバックアップスクリプトを定期実行してみようと思います。

ESXi の cron 設定は記述方法こそ同じですが、他の Linux OS と異なり再起動すると消えてしまう動作となります。cron の設定を永続化する方法、実行時刻の注意点なども併せてご紹介します。

環境

  • VMware vSphere ESXi 6.7 Update 3

cron の設定方法

ESXi には crontab コマンドがありませんので、crontab -e などで編集ができません。cron の設定ファイルを直接編集します。

cron の設定はファイルは /var/spool/cron/crontabs/root です。

パーミッションは 1444 の ReadOnly になっているので、まずは一時的に 1744 などに変更します。

余談ですがパーミッション4桁のうち最初の1桁目はスティッキービットと呼びます。詳しい説明は割愛しますが、スティッキービットのフラグが立っていると所有者もしくはスーパーユーザー (root) しかファイル・ディレクトリの削除ができなくなります。

下記のパーミッションで最後に T がついてますが、この T がスティッキービットを表します。

# パーミッションの確認
[root@esxi1:~] ls -l /var/spool/cron/crontabs/root
-r--r--r-T    1 root     root           324 Nov 23  2019 /var/spool/cron/crontabs/root

# パーミッションを 1744 に変更
[root@esxi1:~] chmod 1744 /var/spool/cron/crontabs/root

# パーミッションの再確認
[root@esxi1:~] ls -l /var/spool/cron/crontabs/root
-rwxr--r-T    1 root     root           324 Nov 23  2019 /var/spool/cron/crontabs/root

そのあと、vi などで cron 設定を行います。フォーマットは他の Linux OS と同じです。

vi /var/spool/cron/crontabs/root

今回は例として下記を追記しました。

## MSEN Original Backup Tasks
00   16   *   *   *   /vmware_backup.sh centos8

ここで注意点ですが、ESXi のハードウェアクロックは UTC+0:00 です。日本時間と9時間時差があるので、時刻の設定値は-9時間した時刻に設定しましょう

上記の例では毎日 16:00 に実行されますが、日本時間では 1:00 に実行されます

参考情報を載せておきます。
ESXiの時刻設定について - VMware Technology Network VMTN

先ほど変更したパーミッションをもとに戻します。

# パーミッションを 1444 に変更
[root@esxi1:~] chmod 1444 /var/spool/cron/crontabs/root

# パーミッションの確認
[root@esxi1:~] ls -l /var/spool/cron/crontabs/root
-r--r--r-T    1 root     root           506 Nov 20 08:28 /var/spool/cron/crontabs/root

crond を再起動し、設定を反映します。

[root@esxi1:~] /bin/kill $(cat /var/run/crond.pid)
[root@esxi1:~] /usr/lib/vmware/busybox/bin/busybox crond

再起動した際に cron に自動追記する方法

ESXi の cron は再起動すると元に戻る仕様のようです。このままでは消えてしまうので、/etc/rc.local.d/local.sh を編集し起動時に cron 設定を追記するようにします。
/etc/rc.local.d/ の下に適当にファイルを作成しそこに記載してもよいと思います。

vi /etc/rc.local.d/local.sh

追記した内容は下記のとおりです。先の手順に記載した crond の再起動も忘れずに記述します。
※ 行末に書いている exit 0 の手前に追記してください。

/bin/echo "## MSEN Original Backup Tasks" >> /var/spool/cron/crontabs/root
/bin/echo "00   16   *   *   *   /vmware_backup.sh centos8" >> /var/spool/cron/crontabs/root


/bin/kill $(cat /var/run/crond.pid)
/usr/lib/vmware/busybox/bin/busybox crond

全体はこんな感じです。

[root@esxi1:~] cat /etc/rc.local.d/local.sh
#!/bin/sh

# local configuration options

# Note: modify at your own risk!  If you do/use anything in this
# script that is not part of a stable API (relying on files to be in
# specific places, specific tools, specific output, etc) there is a
# possibility you will end up with a broken system after patching or
# upgrading.  Changes are not supported unless under direction of
# VMware support.

# Note: This script will not be run when UEFI secure boot is enabled.

/bin/echo "## MSEN Original Backup Tasks" >> /var/spool/cron/crontabs/root
/bin/echo "00   16   *   *   *   /vmware_backup.sh centos8" >> /var/spool/cron/crontabs/root

/bin/kill $(cat /var/run/crond.pid)
/usr/lib/vmware/busybox/bin/busybox crond

exit 0

これで、ESXi を再起動しても cron が自動設定されるようになりました。

ではまた。

参考

おすすめの記事