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

 更新时间:2024年10月21日 16:33:01   作者:工程师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
}
 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • keepalived实现nginx高可用

    keepalived实现nginx高可用

    这篇文章主要为大家详细介绍了keepalived实现nginx高可用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • -bash:/usr/bin/yum:没有那个文件或目录的解决方案

    -bash:/usr/bin/yum:没有那个文件或目录的解决方案

    在CentOS系统中,不慎删除或卸载了yum可以通过重新安装来恢复,首先,确认系统版本,例如CentOS,然后新建所需目录以存放下载的文件,接下来,分别从镜像源下载yum组件和python依赖的rpm包,安装python时,如果遇到依赖问题,可选择强制安装
    2024-10-10
  • 详解如何在Linux(CentOS 7)命令行模式安装VMware Tools

    详解如何在Linux(CentOS 7)命令行模式安装VMware Tools

    本篇文章主要介绍了如何在Linux(CentOS 7)命令行模式安装VMware Tools,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • 5款最佳的免费Linux杀毒软件

    5款最佳的免费Linux杀毒软件

    Linux的安全性毋庸置疑。很多Linux新手都这样认为,但是Linux同样也有可能遭受病毒的侵袭。这篇文章主要介绍了5款最佳的免费Linux杀毒软件,需要的朋友可以参考下
    2014-06-06
  • linux mint 18虚拟机下设置1080P分辨率的方法

    linux mint 18虚拟机下设置1080P分辨率的方法

    下面小编就为大家带来一篇linux mint 18虚拟机下设置1080P分辨率的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Linux管理和清理日志文件的有效方法

    Linux管理和清理日志文件的有效方法

    在现代系统管理中,日志文件的管理是一个重要而复杂的任务,日志文件不仅记录了系统运行状态,还可以帮助我们排查问题、分析性能、进行审计等,文将详细介绍在 Linux 系统中如何管理和清理日志文件,包括按时间批量删除日志、保留日志文件以及其他有效的日志管理策略
    2024-10-10
  • CentOS服务器apache绑定多个域名的方法

    CentOS服务器apache绑定多个域名的方法

    这篇文章主要为大家详细介绍了CentOS服务器apache绑定多个域名的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • CentOS 开机启动自定义脚本详解及实现

    CentOS 开机启动自定义脚本详解及实现

    这篇文章主要介绍了CentOS 开机启动自定义脚本的相关资料,有些时候我们需要在服务器里设置一个脚本,让他一开机就自己启动,需要的朋友可以参考下
    2016-11-11
  • Linux的netstat命令详解

    Linux的netstat命令详解

    这篇文章主要介绍了Linux的netstat命令,netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。需要的朋友可以参考下面文章内容
    2021-09-09
  • SSH的ssh-keygen命令基本用法详解

    SSH的ssh-keygen命令基本用法详解

    ssh-keygen可用来生成ssh公钥认证所需的公钥和私钥文件,本文为大家详细介绍ssh-keygen的基本使用方法
    2018-10-10

最新评论