先日、VMware ESXi上でコマンドやスクリプトを定期実行させる必要があったので、ちょっと調べてみることにした。 一応、VMware ESXi上で動いているbusyboxでもcronが利用できるようだ。

しかし、ESXiにはcrontabコマンドが存在していないため、cronを利用する場合は設定ファイルである「/var/spool/cron/crontabs/root」を直接編集する必要がある。 また、これらの設定も再起動後にはクリアされてしまうため、ESXiの再起動後にも設定を有効にする場合は、再起動と同時に上記設定ファイルに設定を再度書き込むようにする。

1.ESXi再起動後も設定を保持させる

上でも記述したが、ESXi再起動後もcronの設定を保持させる場合は、再起動時に「/var/spool/cron/crontabs/root」に設定を書き込ませるようにする。 そのため、「/etc/rc.local.d/local.sh」にそのような記述を行う必要がある。

~ # vi /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.

/bin/echo "* * * * * cronで実行させたいコマンド" >> /var/spool/cron/crontabs/root
/bin/kill $(cat /var/run/crond.pid)
/bin/busybox crond

exit 0

コメント行が終了した直後の一行目にあるように、「/var/spool/cron/crontabs/root」に設定を書き込ませるような記述を行う。

2.ESXi再起動前に設定を有効にする

上記設定を行う事で、ESXiで再起動を行う事でcronの設定は有効になる。 しかし、何らかの事情があってESXiの再起動が行えない場合は、直接「/var/spool/cron/crontabs/root」を編集すると良いだろう。

設定の方法については、通常のcronの設定と変わらないため割愛する。