linux如何通过crontab命令定时执行shell脚本
作者:工程师123456
为保障网安测试活动的顺利进行,需要设置Linux服务器上服务的定时启停,本文介绍了通过crontab实现服务定时启停的方法,包括检查crontab安装、编写启停脚本、创建定时任务、日志记录,以及问题解决方案,通过crontab-e命令编辑定时任务
前言
由于网安要对公司服务器进行安防测试活动,因此需要对测试环境服务器上的服务进行定时启停,避免端口被网安误伤 需求为测试服务器早上9点linux自动启动后台服务,晚上8点半自动停止后台服务
项目经理提示使用linux的crontab指令实现
一、查看系统是否安装crontab命令
直接输入 crontab -l 查询当前用户的定时任务
crontab -l
若出现command not found 则表示需要安装crontab
注:
- vim /etc/crontab 命令可以查询当前系统下的定时任务,同样可以使用。
- 与crontab -e 的区别一个是用户级一个是系统级,系统级编辑文件会有语法提示。
编写启动服务和停止服务的shell脚本
二、创建crontab定时任务执行shell脚本
执行 crontab -e 会打开当前用户的定时任务工作表
如果没有定时任务打开就是一个空的 VI 编辑界面
在里面添加自己的定时任务
到这里定时任务就已经创建完了,如果出现shell脚本无法执行的问题,可能是环境变量的问题,或者是相对路径的问题等等
三、让定时任务执行后打印日志记录一下
1.直接让定时任务启动的项目日志重定向到指定日志目录
例如:
30 23 * * * /path/to/shell/script.sh >> /path/to/log/file 表示每晚的23:30执行/path/to/shell/script脚本, 并且把项目启动日志重定向输出到/path/to/log/file文件。
2.在shell脚本里额外输出自定义日志
例如:
。。。项目启动shell脚本内容。。。 #此处获取系统时间不同方法可以实现多种格式 time=$(date) echo $time"-----XXX服务已定时启动" >> /path/log/crontablog.log
这样会把每次启停的时间和是否执行记录到 crontablog.log 文件中。(若不存在.log文件则会自动创建并写入,后续记录会追加写入),此方式更灵活
四.问题解决
手动执行能打印日志,定时任务执行无日志输出
原因:
是某些命令无法使用crontab调用,因为用户登陆Linux操作系统的时候,/etc/profile, ~/.bash_profile等配置文件会被自动执行,所以手动执行脚本能够成功,但是crontab执行失败
解决办法:
- 1.在shell脚本开头添加
. /etc/profile . ~/.bash_profile
#!/bin/bash # Destription: test cpu usage # Example : sh cpu_usage.sh consume 8 | sh cpu_usage.sh release #must have load env for crontab . /etc/profile . ~/.bash_profile #...... #...... date_time=$(date +"%Y-%m-%d %H:%M:%S")
- 2.日志输出采用绝对路径
function release() { for pid in $(ps -ef |grep /bin/bash |grep -v grep |awk '{print $2}' |xargs) do echo $date_time"--release cpu pid: "$pid >> /data01/temp/cpu_crontab_log.log kill -9 $pid done }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。