设为首页 收藏本站
查看: 693|回复: 0

crontab小节2则:①crontab运行失败;②shell批量管理crontab

[复制链接]

尚未签到

发表于 2018-8-25 07:24:41 | 显示全部楼层 |阅读模式
  ①crontab运行失败
  首先,用crontab一般都是来跑shell脚本的,python相关的暂请绕道= =!
  排除我遇到的问题的第一种可能::我们来分析下crontab的机制。(每个linux用户都有自己的crontab任务:/var/spool/cron/ 每个用户都是自己名字命名的文件夹。)so,可以这么理解。当我们每个用户用自己的号登陆服务器的时候,每个终端(tty)启动的时候,都会读一次环境变量(/etc/profile),但是crontab跑起来的就不一样了,它不会去读所谓的/etc/profile的,所以,脚本中最好加上source /etc/profile,才能保证这里不会出问题。
  然后我来描述下我遇到的问题:
  需求:需要监控每台服务器上N多用户中配置文件中的异常。我的服务器环境是禁止root-ssh登录的,需要用admin用户登录,然后su到root。所以当遇到很多台机器的时候,就有一些的局限性。(之前试着写了几次expect,总是绕不过su,写了一会没耐心就停了。我试了另外一种方法第二段写出来。)
  经过1:在这里,会有很多人发现我饶了很多圈!这点我现在做这个当时已经考虑到了,但是仍然这么走尝试了下:因为root一般情况下不登录。我们对admin放了一个sh的权限,也就是在/etc/sudoer里面给admin负了个可以sh的权限。这里有一点疏忽,后边我会说到。
  经过2:我写好的脚本是放在本机root跑的,然后把结果放在本机上,然后统一用一台管理机来扫这个文件,然后把结果汇总,进行报警通知。
  经过3:别的不贴了,写一下我采集的脚本中的1个函数,也就是这里出了问题:
#        /usr/bin/ssh -p 端口 -t admin@$1 "echo 密码 | sudo -S sh -c \"cat /home/zabbix/mysqlcheck/stand2/result\""|sed "s@\[sudo\] password for admin: @@g" > $DIR/biaozhun.txt  经过4:细心的大哥们会看到,我这里ssh的时候,起了1个终端t,这里的t在man里面的大概解释是这样的:强制配置pseudo-tty. 这可以在远程机器上去执行任意的screen-based方程式。所以这里就可以相当于expect一样echo密码进去了,达到sudo输入密码的效果,然后在进行处理。
  结果,我把这个脚本放在crontab里面,2天后才发现他根本没跑。然后经过各种测试,确定了函数里面没运行。但是奇怪的是我命令行调脚本跑的很畅快。。
  最后,我把全部错误信息都打了出来,发现提示我没有tty去跑。
  解决办法:
  1、将zabbix的整个目录都改了权限,然后直接ssh admin去cat
  2、将/etc/sudoer中的Defaults  requiretty 注释掉。
  当然,这种“老套”的监控方式是有很多的弊端的,我也进行了一些别的修改。今天想不全当时遇到的繁琐的问题了,所以整理的有些简单,以后想到了会来补一下。
  ②shell“批量管理”crontab
  1、首先来曝下上边提到的安装方法:
  函数:
#ssh -p 端口 -t admin@$1 "echo 密码 | sudo -S sh -c \"cd /usr/local/src;wget 'http://sourceforge.net/projects/logcheck/files/latest/download?source=dlp';tar -zvxf logcheck-1.1.2.tar.gz;cd logcheck-1.1.2;make linux;chmod 705 /usr/local/bin/logtail;echo $1>>1111 \""  2、crontab任务,
  Crontab添加任务 为crontab -e ,方式为一些前学者提到的“交互式”,反正就是没法用命令行进行修改吧。
  于是我这样来写了一下
#!/bin/sh  
BASEDIR=/home/zabbix
  
PROGRAM=$BASEDIR/ccms-errlog/check.sh
  
DIRCRIPTION="#ccms数据库监控err log check-add by yanzong.chen"
  
CRONTAB_CMD="*/15 * * * * sh $PROGRAM  &> /dev/null 2>&1 &"
  
(crontab -l 2>/dev/null | grep -v $PROGRAM;echo $DIRCRIPTION ;echo "$CRONTAB_CMD") | crontab -
  
COUNT=`crontab -l | grep $PROGRAM | grep -v "grep"|wc -l `
  
if [ $COUNT -lt 1 ]; then
  echo "fail to add crontab $PROGRAM" >$BASEDIR/erro
  
fi
  删除
#!/bin/sh  
BASEDIR=/home/zabbix
  
PROGRAM=$BASEDIR/ccms-errlog/check.sh
  
DIRCRIPTION="#ccms数据库监控err log check-add by yanzong.chen"
  
CRONTAB_CMD="*/15 * * * * sh $PROGRAM  &> /dev/null 2>&1 &"
  
(crontab -l 2>/dev/null | egrep -v "$PROGRAM|$DIRCRIPTION|$CRONTAB_CMD") | crontab -
  
COUNT=`crontab -l | grep $PROGRAM | grep -v "grep"|wc -l `
  
if [ $COUNT -eq 1 ]; then
  echo "fail to del crontab $PROGRAM"
  
fi
  ~



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-556118-1-1.html 上篇帖子: 【shell脚本】监控服务进程状态 下篇帖子: shell 递归遍历目录,获取目录下的所有内容
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表