linux中写定时任务

文章详细介绍了如何在Linux系统中使用crond服务设置定时任务,包括安装crond、管理服务、编写crontab任务以及处理nohup的日志。通过示例展示了如何每分钟执行一次test.sh脚本并清除日志,同时提供了检查和修复脚本格式问题的方法。

场景:我们生产环境中有大量的日志记录,但是我们的磁盘没有太大,需要定时清理磁盘



crond 定时任务详解

安装定时任务

yum install cronie

crontab服务启动与关闭

service crond start     //启动服务
service crond stop      //关闭服务
service crond restart   //重启服务
service crond reload    //重新载入配置
service crond status    //查看crontab服务状态

crontab操作

crontab -l //查看当前用户的crontab;
crontab -e //编辑crontab;
crontab -r //删除crontab.

crontab 命令

格式:

*       *        *        *        *           command
minutehourdaymouthweekcommand
星期命令

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

特殊字符:
星号():代表每的意思,例如month字段如果是星号,则表示每月都执行该命令操作。
逗号(,):表示分隔时段的意思,例如,“1,3,5,7,9”。
中杠(-):表示一个时间范围,例如“2-6”表示“2,3,4,5,6”。
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如
/10,如果用在minute字段,表示每十分钟执行一次。
举例

# 每分钟执行一次test.sh  并将日志打印到/usr/bks/common/test.log中
*/1 * * * * /usr/bks/common/test.sh  >>/usr/bks/common/test.log 2>&1

test.sh

#!/bin/sh
# 进入指定目录
cd /usr/bks/common
#输出内容
echo "just test"
#输出当前时间,将当前事件追加到test1.txt这个文件中
echo `date` >> test1.txt

查看日志

错误:
在这里插入图片描述
问题原因:没有权限

sudo chmod +777 /usr/local/某路径/xxxx

错误2
在这里插入图片描述
错误原因:脚本格式问题,在windows系统中编写的脚本,修改格式

#1、使用vi工具
 vi test.sh
#2、利用如下命令查看文件格式 
:set ff 或 :set fileformat 
#3、可以看到如下信息 
#fileformat=dos 或 fileformat=unix 
#4、利用如下命令修改文件格式 
:set ff=unix 或 :set fileformat=unix 
#5、存盘退出
:wq 

正确示例
在这里插入图片描述

丢弃linux中的执行日志

#&>/dev/null 2>&1  在linux中是无底洞
*/1 * * * * /usr/bks/common/delLog.sh  &>/dev/null 2>&1

Linux进入nano模式

出现如下情况说明进入了nano模式

G Get Help      ^O Write Out     ^W Where Is      ^K Cut Text      ^J Justify       ^C Cur Pos       M-U Undo         M-A Mark Text    M-] To Bracket   M-Q Previous
^X Exit          ^R Read File     ^\ Replace       ^U Uncut Text    ^T To Spell      ^_ Go To Line    M-E Redo         M-6 Copy Text    ^Q Where Was     M-W Next

方式一

写入内容:

Ctrl + O 		
Enter			(回车确定写入)

退出编辑:

Ctrl + X		(没有更改文件内容时,按下即退出编辑器)
Enter			(确定退出)

方式二

第二种 将 crontab nano 改为 vim 编辑器

直接定义变量指定 crontab 为 vim 编辑器

export EDITOR="/usr/bin/vim" ; crontab -e

解决nohup 的日志问题

定时清理nohup中日志,不能删除nohup.out文件,只能清理里面的日志
日志脚本

# 清理/home/java/applet/nohup.out路径下的nohup.out日志
echo "" > /home/java/applet/nohup.out;
使用Linux shell编定时任务可以按照以下方式进行: ### 编shell脚本 首先要编一个shell脚本,该脚本包含需要定时执行的任务。例如,创建一个名为`test.sh`的脚本,存放在`/usr/local/sbin`路径下,内容如下: ```bash #!/bin/bash echo "yes" >> /home/abc.txt ``` 这个脚本的作用是将字符串 "yes" 追加到`/home/abc.txt`文件中。 ### 设置定时任务 使用`crontab`命令来设置定时任务,`crontab`有全局配置文件`/etc/crontab`,用于系统任务;还有针对用户的配置文件,存于`/var/spool/cron/`目录下,以用户名为文件名。 #### 编辑用户的定时任务 使用`crontab -e`命令编辑当前用户的定时任务,然后在打开的文件中添加定时任务规则。例如,若要每分钟执行一次`/usr/local/sbin/test.sh`脚本,可以添加如下内容: ```plaintext * * * * * /usr/local/sbin/test.sh ``` 若要将执行结果追加到日志文件中,可成: ```plaintext * * * * * /usr/local/sbin/test.sh >> /var/log/test.log 2>&1 ``` 其中`2>&1`表示将标准错误输出也重定向到标准输出。 #### 全局定时任务配置 如果是系统管理员要设置全局定时任务,可以编辑`/etc/crontab`文件。在该文件中添加任务时,需要指定执行任务的用户。例如: ```plaintext * * * * * root /usr/local/sbin/test.sh ``` 这里指定了任务由`root`用户执行。 ### cron表达式规则 cron表达式从分开始,规则如下: ```plaintext ┌───────────── minute (0 - 59) │ ┌───────────── hour (0 - 23) │ │ ┌───────────── day of the month (1 - 31) │ │ │ ┌───────────── month (1 - 12 or JAN - DEC) │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN - SAT, Sunday = 0 or 7) │ │ │ │ │ │ │ │ │ │ * * * * * command to be executed ``` 可以使用不同的符号来表示不同的时间范围,例如: - `*`:表示任意值,如`*`在分钟字段表示每分钟。 - `/`:表示间隔,如`*/5`在分钟字段表示每5分钟。 - `-`:表示范围,如`1-5`在小时字段表示1点到5点。 - `,`:表示列举,如`1,3,5`在日字段表示每月的1号、3号和5号。 ### 示例:调用mysql数据库存储过程 若要使用shell脚本调用mysql数据库存储过程并设置定时任务,可编如下脚本: ```bash #!/bin/bash host1=127.0.0.1 user=root passwd=HaoChuangMysql@2018 port=23306 mysql -h${host1} -u${user} -p${passwd} -P${port} -e "use bg-biz;call test_insert;" ``` 然后使用`crontab -e`添加定时任务,如每天8点50分执行该脚本: ```plaintext 50 8 * * * /path/to/your/script.sh > /dev/null 2>&1 & ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱上编程2705

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值