it编程 > 前端脚本 > Powershell

linux如何通过crontab命令定时执行shell脚本

221人参与 2024-10-22 Powershell

前言

由于网安要对公司服务器进行安防测试活动,因此需要对测试环境服务器上的服务进行定时启停,避免端口被网安误伤 需求为测试服务器早上9点linux自动启动后台服务,晚上8点半自动停止后台服务

项目经理提示使用linux的crontab指令实现

一、查看系统是否安装crontab命令

直接输入 crontab -l 查询当前用户的定时任务

crontab -l 

若出现command not found 则表示需要安装crontab

注:

编写启动服务和停止服务的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执行失败

解决办法:

. /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")
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
}
 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

Linux上读取或设置环境和shell变量的教程

10-21

windows为什么有两个命令行工具? PowerShell VS 命令提示符区别对比

10-30

查看Windows监听端口占用的两种命令: Netstat或Powershell用法

11-05

Linux服务器升级GLIBC失败导致shell命令不可用的情况怎么处理

11-18

Ubuntu如何搭建FTP服务器

11-18

Nginx中return和rewrite的写法及区别浅析

09-17

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论