本文主要是介绍自定义LSF服务管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
自定义LSF服务管理
背景
传统的LSF服务管理是通过命令行操作的,而且需要如下多个命令:
- 启动LSF服务
lsadmin limstartup
lsadmin resstartup
badmin hstartup
- 停止LSF服务
badmin hshutdown
lsadmin resshutdown
lsadmin limshutdown
可见管理很不方便。后续又引入了单条命令来管理LSF服务:
- 启动LSF服务
lsf_daemons start
- 停止LSF服务
lsf_daemons stop
相对来讲简化了操作,但并不符合操作系统的服务管理规范。因此又引入了 lsfd.service 服务,可以通过 systemctl 服务管理工具来管理LSF服务。
问题
LSF服务由三个服务进程组成,分别是LIM、RES、SBD;在实践中发现lsfd.service并不能有效地管理这三个服务,如果其中的一个服务掉线后并不能自动拉起。
为了解决这个问题,在最新的LSF 10.1.14 pack中在保留原有lsfd.service的基础上又引入三个服务,分别管理LIM、RES和SBD服务进程,这样LSF的服务项达到了四个之多。感觉增加了管理的复杂度。
解决方案
我们可以通过自定义LSF服务的方法简化管理。方法是在服务进程中定时查看LIM、RES和SBD服务进程,如果发现有进程掉线就及时拉起服务。
以下是示例:
- lsfd.service 示例
[Unit]
Description=IBM Spectrum LSF
After=remote-fs.target network.target nfs.service autofs.service gpfs.service nscd.service[Service]
Type=simple
ExecStartPre=/bin/bash -c '(timer=12; while (( $timer )); do if [ ! -d "/lsf/10.1/linux3.10-glibc2.17-x86_64/etc" ]; then sleep 5; else exit 0; fi; timer=$[$timer-1]; done; echo "/lsf/10.1/linux3.10-glibc2.17-x86_64/etc not found." 1>&2; exit 1;)'
ExecStart=/lsf/10.1/linux3.10-glibc2.17-x86_64/etc/lsfwatchdog.sh start
ExecStop=/lsf/10.1/linux3.10-glibc2.17-x86_64/etc/lsfwatchdog.sh stop
KillMode=none
LimitMEMLOCK=infinity
Delegate=yes[Install]
WantedBy=multi-user.target
- lsfwatchdog.sh 示例
#!/bin/bashfunction checkLSFService() {. /lsf/conf/profile.lsflogfile="/lsf/log/watchdog.`hostname`.log"services_num=$( ps -lf -u root |egrep "$LSF_SERVERDIR/sbatchd|$LSF_SERVERDIR/lim|$LSF_SERVERDIR/res"|grep -v grep |wc -l )[ $services_num -lt 3 ] && {date >> $logfileecho "LSF services is missing." >> $logfileps -lf -u root |egrep "$LSF_SERVERDIR/sbatchd|$LSF_SERVERDIR/lim|$LSF_SERVERDIR/res"|grep -v grep >> $logfileecho "Start LSF services." >> $logfile/lsf/10.1/linux3.10-glibc2.17-x86_64/etc/lsf_daemons startecho "LSF Service started" >> $logfileps -lf -u root |egrep "$LSF_SERVERDIR/sbatchd|$LSF_SERVERDIR/lim|$LSF_SERVERDIR/res"|grep -v grep >> $logfile}
}function start() {(while truedocheckLSFServicesleep 60done) &
}function stop() {. /lsf/conf/profile.lsf/lsf/10.1/linux3.10-glibc2.17-x86_64/etc/lsf_daemons stoppkill lsfwatchdog.sh
}case $1 in
"start")start;;
"stop")stop;;
esac
结论
在 LSF 10.1.12 集群中经测试,目前运行良好,掉线的服务可以被及时拉起。
同时,在系统运维操作需要停止服务时也能迅速停止服务。
这篇关于自定义LSF服务管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!