自ESXI7.0后ESXI系统内部做了许多调整,特别是到ESXI8.0,安全性提高了许多,比如用户计划任务的管理,登陆验证,比如用户命令chown,chmod,MV,CP,rm 等等体现在对于用户权限的限定范围和使用上,这使得用户DIY自己的设备方便脚本管理存在一定的限制,这也使得用户需要新一轮的探索和适应,以便于对服务器的维护管理。
问题1:
在ESXI8.0中UTC时区为强制性,WEB端和命令端都无法更改(/etc/localtime多年前咱们提出的替换法已不适用,且用户无法修改,删除,这次ESXI实现UTC时区强制内部统一(显示任务日志为CST应该是经过了内部消化处理的),但这却使得平时管理上多有不便,我们平时习惯的还是CST时区进行管理(如计划任务设置等)如果只是修改时间虚拟机时间又会出现不正常的情况,造成应用错乱和管理的混乱。那么为何ESXI要强制限制用户更改时区设置呢,我想从VC上应该能找到答案,有兴趣的可以研看下,这里不做讨论,适用自己的才是最好的–你懂的!!,我们最主要的是解决目前单台ESXI主机上找到适合自己方便快捷且适用的管理方法。
问题2:
ESXI8中限制了用户自定计划任务执行(/var/spool/cron/crontabs/root),当然你可以强制写入计划任务,但是这个任务始终无法执行,尝试了多种方法无果(重新加载任务计划,强制写入,修改权限,修改BIOS模式),许多以前的资料也已是昨日黄花,无解。或许这就是ESXI8.0最大的改变,经过了六七年的发展esxi67已被大众用户所“熟悉”。
抛出两个问题后我们还是回归正题,首先时区问题如今尝试已无解那们我就得另寻他法,不用再去纠结web界面和shell里面的UTC,把服务器保持同步网上的CST时区时间同步即可,这样首先确保虚拟机时间是正确的,因为虚拟机时间是跟随ESXI时间的(有资料介绍可以更改虚拟机配置文件的几个参数可以实现强制不同步ESXI时间,尝试无果,还有资料说用命令修改BIOS时间等,可能会出新的问题,我觉得这些也没必要,虚拟服务器多,增减服也会太过于繁琐),只要确保虚拟服务器时间正常,咱们平时跑的应用服就不会有问题(开启每台服务器的时间同步功能,这样更能确保应用服时间正确性)。这样余下的两个问题是平时对管理ESXI才会遇到的,咱们分步解法,首先解决了上层,再来解决命令底层。这样相对效率更高。
下面介绍下我的思路和解决方法:
既然shell下已不让使用自定义计划任务和更改时间这两项,然后这两项设置是有关联关系的。为了管理咱们换一种思路解法。在linux下提供了setsid和sleep两个命令大家还记得吧,对就用这两个命令实现我们的定时任务计划执行,尝试了下ESXI8下依然确也有这两个命令,这就是我们救星了。
setsid:可以将我们的脚本执行压入后台执行(当然还有其它命令可用,在这里我觉得这个稳定性更胜一筹)。
sleep:可以实现我们的脚本延时执行。
setsid+sleep:即可实现完咱们需要的定时计划任务(时间换算这里不介绍,熟悉SHELL和PY的可以两三语句就搞定处理了,再说sleep也提供了天,小时,分,秒自身平时就很实用了)。
以下是示例:
管理脚本一般般存放位置/vmfs/volumes/datastore1/(自己建目录)
行:sleep 30M 即为定时计划30分后执行。
下段代码为了我们取消计划任务时可以使用到(可自行优化代码)。
state=`echo $?`
if [ $state -ne 0 ];then
exit 1
fi
执行计划关机示例: setsid sh gj.sh
观察退出终端再进:程序仍在执行中
这时系统进程会有一个SLEEP进程:PS |grep sleep
临时取消任务计划:pkill sleep
至此我们遇到的基本问题得以完美解决。