自定义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/bash
function checkLSFService() {
. /lsf/conf/profile.lsf
logfile="/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 >> $logfile
echo "LSF services is missing." >> $logfile
ps -lf -u root |egrep "$LSF_SERVERDIR/sbatchd|$LSF_SERVERDIR/lim|$LSF_SERVERDIR/res"|grep -v grep >> $logfile
echo "Start LSF services." >> $logfile
/lsf/10.1/linux3.10-glibc2.17-x86_64/etc/lsf_daemons start
echo "LSF Service started" >> $logfile
ps -lf -u root |egrep "$LSF_SERVERDIR/sbatchd|$LSF_SERVERDIR/lim|$LSF_SERVERDIR/res"|grep -v grep >> $logfile
}
}
function start() {
(
while true
do
checkLSFService
sleep 60
done
) &
}
function stop() {
. /lsf/conf/profile.lsf
/lsf/10.1/linux3.10-glibc2.17-x86_64/etc/lsf_daemons stop
pkill lsfwatchdog.sh
}
case $1 in
"start")
start
;;
"stop")
stop
;;
esac
结论
在 LSF 10.1.12 集群中经测试,目前运行良好,掉线的服务可以被及时拉起。
同时,在系统运维操作需要停止服务时也能迅速停止服务。