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

简介:

如果你点到这里,希望你能往下看下内容。


crontab运行失败

首先,用crontab一般都是来跑shell脚本的,python相关的暂请绕道= =


排除我遇到的问题的第一种可能::我们来分析下crontab的机制。(每个linux用户都有自己的crontab任务:/var/spool/cron/每个用户都是自己名字命名的文件夹。)so,可以这么理解。当我们每个用户用自己的号登陆服务器的时候,每个终端(tty)启动的时候,都会读一次环境变量(/etc/profile),但是crontab跑起来的就不一样了,它不会去读所谓的/etc/profile的,所以,脚本中最好加上source /etc/profile,才能保证这里不会出问题。

然后我来描述下我遇到的问题:

需求:需要监控每台服务器上N多用户中配置文件中的异常。我的服务器环境是禁止root-ssh登录的,需要用admin用户登录,然后suroot。所以当遇到很多台机器的时候,就有一些的局限性。(之前试着写了几次expect,总是绕不过su,写了一会没耐心就停了。我试了另外一种方法第二段写出来。)

经过1在这里,会有很多人发现我饶了很多圈!这点我现在做这个当时已经考虑到了,但是仍然这么走尝试了下:因为root一般情况下不登录。我们对admin放了一个sh的权限,也就是在/etc/sudoer里面给admin负了个可以sh的权限。这里有一点疏忽,后边我会说到。

经过2我写好的脚本是放在本机root跑的,然后把结果放在本机上,然后统一用一台管理机来扫这个文件,然后把结果汇总,进行报警通知。

经过3别的不贴了,写一下我采集的脚本中的1个函数,也就是这里出了问题:

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,这里的tman里面的大概解释是这样的:强制配置pseudo-tty. 这可以在远程机器上去执行任意的screen-based方程式。所以这里就可以相当于expect一样echo密码进去了,达到sudo输入密码的效果,然后在进行处理。

结果,我把这个脚本放在crontab里面,2天后才发现他根本没跑。然后经过各种测试,确定了函数里面没运行。但是奇怪的是我命令行调脚本跑的很畅快。。

最后,我把全部错误信息都打了出来,发现提示我没有tty去跑。

解决办法:

1、将zabbix的整个目录都改了权限,然后直接ssh admincat

2、/etc/sudoer中的Defaults requiretty 注释掉。

当然,这种“老套”的监控方式是有很多的弊端的,我也进行了一些别的修改。今天想不全当时遇到的繁琐的问题了,所以整理的有些简单,以后想到了会来补一下。



shell“批量管理”crontab

1、首先来曝下上边提到的安装方法:

函数:

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 ,方式为一些前学者提到的“交互式”,反正就是没法用命令行进行修改吧。

于是我这样来写了一下

1
2
3
4
5
6
7
8
9
10
#!/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

删除

1
2
3
4
5
6
7
8
9
10
#!/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









本文转自 陈延宗 51CTO博客,原文链接:http://blog.51cto.com/407711169/1327964,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
Linux Shell 开发工具
Shell的运行原理以及Linux当中的权限问题
Shell的运行原理以及Linux当中的权限问题
78 0
|
6月前
|
运维 Java Shell
Linux非常详细的shell运维脚本一键启动停止状态SpringBoot打成可运行jar包
Linux非常详细的shell运维脚本一键启动停止状态SpringBoot打成可运行jar包
269 0
|
6月前
|
搜索推荐 Shell Linux
【Shell 命令集合 系统管理 】Linux 管理用户配置文件 userconf命令 使用指南
【Shell 命令集合 系统管理 】Linux 管理用户配置文件 userconf命令 使用指南
95 2
|
6月前
|
Shell Linux 程序员
【Linux】Shell 命令以及运行原理
【Linux】Shell 命令以及运行原理
|
2月前
|
安全 Shell Linux
从命令行界面运行交互式PHP Shell
从命令行界面运行交互式PHP Shell
|
3月前
|
Ubuntu Linux Shell
在Linux中,如何使用shell脚本判断某个服务是否正在运行?
在Linux中,如何使用shell脚本判断某个服务是否正在运行?
|
3月前
|
Shell Linux 程序员
详解shell 运行原理及Linux权限
详解shell 运行原理及Linux权限
|
4月前
|
敏捷开发 Shell 测试技术
阿里云云效产品使用合集之如何用私有构建机运行shell命令打出的镜像作为下一个阶段的入参
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
存储 Shell 开发者
Shell 变量详解:如何定义、使用和管理
**Shell脚本中,变量是核心元素,用于暂存数据。变量默认为字符串,赋值时等号两侧无空格。命名遵循:数字、字母、下划线,以非数字开头。常用特殊变量如 `$0` (脚本名),`$#` (参数个数)。定义变量可使用单引号(不解析变量)、双引号(解析变量)或不加引号(注意空格)。使用花括号明确变量边界,`readonly` 则可设定只读变量,`unset` 删除变量。实践这些概念以加深理解。**
207 0
|
6月前
|
Linux Shell 程序员
【Linux】权限(shell运行原理、概念,Linux权限)
【Linux】权限(shell运行原理、概念,Linux权限)
52 2