在ESXi主机中,并不支持直接使用cron命令配置计划任务,但是我们可以直接编辑cron文件,该文件在ESXi中的路径是:/var/spool/cron/crontabs/root。
1、首先通过命令vi /var/spool/cron/crontabs/root
编辑cron文件,在文件中添加计划任务(注意:该文件为只读,需要使用:wq!进行强制保存退出)。例如:
*/1 * * * * /bin/echo aaa >> /tmp/a.txt
解释下该命令的意思,每隔一分钟就向/tmp/a.txt该文件中追加(也就是在文件的最后面加上)aaa。
如图所示:
对cron命令不太了解的同学可以通过该文章了解下cron的格式cron格式说明。随后可以通过命令tail -f /tmp/a.txt
来事实监控该计划任务是否正常运行
,运行结果如下图所示(每隔一分钟,就会在a.txt中追加一行aaa):
2、等等等等,还没完呢,你以为这样就结束了?ESXi除了存储文件目录下的文件在重启主机之后不会删除之外,其他目录都会复原,也就是说你刚刚设置的计划任务在下一次主机重启之后就会丢失,既然如此,我们就需要设置该命令开机是自动写入到cron文件中,这样,主机每次重启之后都会自动启动该计划任务。
通过KB2043564我们得知ESXi5.1/5.5/6.x主机在引导过程中会执行/etc/rc.local.d/local.sh
该文件中的命令,故我们需通过vi /etc/rc.local.d/local.sh
修改local.sh文件,在文件末尾的exit 0
前面添加上我们需要的命令:
/bin/kill $(cat /var/run/crond.pid)
/bin/echo "*/1 * * * * /bin/echo aaa >> /tmp/a.txt" >> /var/spool/cron/crontabs/root
/usr/lib/vmware/busybox/bin/busybox crond
解释下上面的命令
第一行:cat /var/run/crond.pid,该命令会显示出crond该命令的进程好,然后调用kill命令将crond进程kill掉。
第二行:使用echo命令在/var/spool/cron/crontabs/root文件中追加我们要设置的计划任务的命令。
第三行:重启crond进程。
3、还没完哦,要注意保存退出/etc/rc.local.d/local.sh文件之后需要执行一次/sbin/auto-backup.sh脚本,local.sh文件才会正真地保存成功,否则会跟crond文件一样,重启后就会还原丢失。如图所示为保存成功:
自此,该计划任务已经设置完成!!!
其实也就是两个步骤:
1、在/etc/rc.local.d/local.sh文件中添加上述的命令,使其开机自动添加计划任务到/var/spool/cron/crontabs/root中。
2、运行/sbin/auto-backup.sh脚本保存local.sh的修改设置,使其永久生效。Tip:
在主机是UEFI安全引导模式下,local.sh脚本是无效的。因本人使用的是虚拟机做实验,故我的ESXi主机也是一台虚拟机,默认情况下为UEFI安全引导模式启动的,下面提供关闭该模式的方法:
在关机情况下,打开虚拟机选项设置,将引导改为BIOS。
以上就是小陈摸索了半天,踩了半天坑得出的经验,希望对大家有帮助。