1.定时检测进程是否挂掉,若挂掉则重启(拉起)

检测脚本如下:

#!/bin/shPATH=/usr/local/mysql/bin:/usr/local/bin:/bin:/usr/bin:/bin:/sbinALARM_BIN="/home/oicq/tools/uniform_msg_client"
PhoneNo="15892765091"
LOCAL_IP=`ifconfig eth1|grep "inet addr"|awk '{printf("%s\n", $2)}'|awk -F: '{printf("%s", $2)}'`TARGET="InviteJoinGrpFlt"
TARGET_Dir="/home/lvlv"
echo `ps -ef|grep "\b${LOGIN_TARGET}\b"|grep -v grep|awk '{printf $0}'`
login_result=`ps -ef|grep "\b${LOGIN_TARGET}\b"|grep -v grep|awk '{printf $2}'`if [ -z "$login_result" ]
thenecho "2 login_result: $login_result"echo "$login_result"ulimit -c 20000cd ${TARGET_Dir}./${TARGET}echo `date` "restart ${LOGIN_TARGET}">> /home/log/restart.log${ALARM_BIN} sms -T ${PhoneNo} -c "${LOCAL_IP} ${LOGIN_TARGET} restart "
fi
echo "$login_result"

上面是用于检查某个指定程序是否挂掉,若挂掉则重启,并发送短信通知到指定的手机。

检查脚本书写完成后,需要crontab来定期执行该脚本,意在每隔多长时间去检测一次。crontab命令选项如下:

-u [user]:用来设定某个用户的crontab服务,例如,“-u lvlv”表示设定lvlv用户的crontab服务,此参数一般有root用户来运行。
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab文件。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。

每个用户的crontab文件存储在/var/spool/cron目录下的各自用户名的文件中,这个文件是不可以直接编辑的,只可以用命令crontab -e来编辑。系统的cron服务启动后每过一分钟读一次这个文件,检查是否要执行里面的命令。因此crontab文件修改后不需要重新启动cron服务并且crontab定时任务的最小时间粒度只能是一分钟,如果想缩短,只能在代码中实现。

crontab文件的含义:
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command

其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

于是我们使用crontab -e 在crontab文件中加入如下一行语句,来完成每隔一分钟执行一次上面的检测脚本check_alive.sh。

*/1 * * * * /home/lvlv/check_alive.sh >/dev/null 2>&1

这里要注意两点:
(1)crontab中的用户自定义命令需要使用绝对路径,否则无法执行。当然系统命令无需使用绝对路径;
(2)crontab中的任何输出都不会输出到屏幕。比如:

0 6 * * * echo "Good morning"

**注意:**单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了,可以把这个输出重定向到另外一个文件中,比如说重定向输出到一个txt文件中,你就可以看到了。

0 6 * * * echo “Good morning.” >> /tmp/test.txt

2.Shell 中执行 MySQL 语句

以函数的形式实现如下:

#run sql statement
function runsql(){dbUserName="-uroot"dbPwd="-proot@mysql"dbName="inv_join_grp"dbContext="${dbUserName} ${dbPwd} ${dbName}"echo $*|mysql ${dbContext};
}#使用示例
runsql [u sql statement]runsql "select * from myTableName"

这里需要注意一点,shell编程中变量含有星号*,被解释成当前目录下的文件列表,容易出现如下错误:

sql="select * from mytable"
echo "execute sql =" ${sql}

输出结果是:

execute sql = select lvlvtest.sh test.txt from mytable

很明显,shell把*解析成了当前目录文件的列表。如果和shell将*星号不进行替换呢,我们可以把变量有用双引号""引起来。

"${sql}"

参考文献

[1]shell编程中变量中含星号的处理
[2]每天一个linux命令(50):crontab命令
[3]Linux cron、crontab计划任务、run-parts

Shell 脚本实例相关推荐

  1. mysql运行状态监控研究内容_如何监控mysql主从的运行状态shell脚本实例介绍

    如何监控mysql主从的运行状态shell脚本实例介绍. #!/bin/bash #define mysql variable mysql_user="root" mysql_pa ...

  2. 超硬核,11个非常实用的 Python 和 Shell 脚本实例

    原文地址: https://developer.51cto.com/article/712305.html Python 脚本部分实例:企业微信告警.FTP 客户端.SSH 客户端.Saltstack ...

  3. shell脚本执行php文件_分享两个shell脚本实例--批量生成随机字符文件名和批量改名...

    概述 在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行. 它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器,或是循环变数.这使得 ...

  4. linux 查重脚本,Linux脚本学习必经之路:Shell脚本实例分享

    写shell脚本还是一样,思路第一,语法其次,下面分享几个脚本实例,大家主要是理解一下里面的思路,语法稍微注意一下. 1. 观察数字,输出包含前6个数字在内的16个数字 观察以下数字,看有什么规律: ...

  5. linux 脚本中=$4,shell脚本实例,通向shell脚本大师的必经之路

    概述 读书百遍其义自见,shell脚本也是,只要例子看得多了,自然就知道怎么写了.这里主要整理了20几个例子,因为内容比较多,所以分了几次来做介绍了.下面的实例最好先自己思考怎么去实现,然后再看下实现 ...

  6. shell脚本实例,通向shell脚本大师的必经之路

    概述 读书百遍其义自见,shell脚本也是,只要例子看得多了,自然就知道怎么写了.这里主要整理了20几个例子,因为内容比较多,所以分了几次来做介绍了.下面的实例最好先自己思考怎么去实现,然后再看下实现 ...

  7. linux运维脚本编写,Linux运维常用shell脚本实例 (转)

    1.用shell脚本批量建立Linux用户 实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码! #!/bin/bash for i ...

  8. JAVA调用shell脚本实例

    2019独角兽企业重金招聘Python工程师标准>>> ~/testcode/HelloWorld.java源码文件 1 public class HelloWorld{   2   ...

  9. Linux shell 脚本实例

    1. 写一个脚本,利用循环计算10的阶乘#!/bin/sh factorial=1 for a in `seq 1 10` do        factorial=`expr $factorial \ ...

  10. 109 个实用 Shell 脚本实例,代码清晰拿来就能用!(附pdf)

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...

最新文章

  1. python https请求报错:SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 解决方法
  2. 8.3. 测试 opensips
  3. 记一次与用户的亲密接触
  4. CRC32算法详细推导(3)
  5. angularjs 结构的两种写法(2)
  6. golang for range原理(转载)
  7. Airflow 中文文档:项目
  8. Python程序设计学习笔记-数据类型
  9. TCP/IP源码分析
  10. mac音频剪辑合并软件哪款比较好用,求推荐
  11. 数字图像处理学习路线
  12. PyQt5 UI设计时自动创建qrc文件
  13. 带宽总结:3dB带宽、零点到零点带宽、均方根带宽等
  14. 智能额温枪软件设计红外测温仪方案开发
  15. NSIS安装包制做软件的常用小技巧
  16. HTML超链接QQ在线聊天
  17. 安卓开发者必备的5款App:终端模拟器、颜色萃取、移动IDE等
  18. bam获取序列_bam格式文件处理大全(四)
  19. 个推技术 | ETL工程师必看!超实用的任务优化与断点执行方案
  20. 【JUC高并发编程】—— 初见JUC

热门文章

  1. 成都睿铂盘点无人机航测三个极端恶劣环境的人员与设备防护指南
  2. libxml2 编译报错
  3. sublime text 3 3143
  4. VC 下加载 JPG / JPEG / GIF / PNG 图片最简单的方法
  5. VS2010整合NUnit进行单元测试
  6. WinForm播放视频
  7. 获取网络图片并异步更新UI
  8. 在自定义HttpHandler中使用Session
  9. Linux安装MYSQL5.7教程(一次成功)
  10. mycat php pdo,mycat程序写入和读取中文乱码解决