linux的crontab定时任务注意避免捕获到自身
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
*/1 * * * * ecs /home/ecs/jkcs/sf_script/d5000-daemon-process.sh
#
# */1 * * * * root bash /usr/local/monitoring/system_resources
*/1 * * * *代表每隔一分钟以ecs用户执行一下该脚本
#!/bin/bash
export JAVA_HOME=/home/ecs/jkcs/osp/jdk1.8.0_131
PIDS=`ps -ef | grep oms | grep -v grep | wc -l`
PIDSS=`ps -ef | grep oms | grep -v grep`
echo $PIDSS >> /home/ecs/jkcs/apache-tomcat-oms/test.log
if [ $PIDS -eq 0 ]
then
echo oms is starting $(date) >> /home/ecs/jkcs/apache-tomcat-oms/test.log
cd /home/ecs/jkcs/apache-tomcat-oms/bin
rm -rf /home/ecs/jkcs/apache-tomcat-oms/bin/CATALINA_PID
./startup.sh
else
echo oms is running on $PIDS $(date) > /home/ecs/jkcs/apache-tomcat-oms/test.log
fi
虽然以ecs用户执行脚本,但是环境变量并不会生效,所以脚本中./startup.sh会以/bin/java去执行,所以需要在脚本中使得环境变量生效,
ecs用户下是tsch,root用户下用的是bash,两个shell不同。bash shell使用的是export, tsch shell使用的是setenv
虽然定时任务中指定了ecs用户,但是crontab是root用户下面的,实测它并不会切换到tsch shell,所以脚本中需要使用export而不是setenv