运维服务 · 2022年4月12日 0

Linux 定时执行shell脚本

1、cron

1.1、什么是cron

Linux中,周期执行的任务一般由cron这个守护进程来处理。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。

1.2、cron的操作

查看cron状态

开启cron   Sodu /etc/init.d/cron start

关闭cron   Sodu /etc/init.d/cron stop

重启cron   Sodu /etc/init.d/cron restart

crontab –e : 修改 crontab 文件,如果文件不存在会自动创建。 

crontab –l : 显示 crontab 文件。 

crontab -r : 删除 crontab 文件。

crontab -ir : 删除 crontab 文件前提醒用户。

1.3、cron的配置含义

在crontab文件中写入需要执行的命令和时间,该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔:

比如说root查看自己的cron设置:crontab -u root -l

再例如,root想删除fred的cron设置:crontab -u fred -r

在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e

 1.4、遇到的问题

除了root用户之外的用户可以执行crontab配置计划任务。所 有用户定义的crontab存储在目录/var/spool/cron下,任务会以创建者的身份被执行。要以特定用户创建一个crontab,先以该用户 登录,执行命令crontab -e,系统会启动在VISUAL或者EDITOR中指定的的编辑软件编辑crontab。文件内容与/etc/crontab格式相同

当更改的crontab需要保存时,文件会保存在成如下文件/var/spool/cron/username。文件名会根据用户名而不同。

   cron服务会每分钟检查一次/etc /crontab、/etc/cron.d/、/var/spool/cron文件下的变更。如果发现变化,就会下载到存储器中。因此,即使 crontab文件改变了,程序也不需要重新启动。推荐自定义的任务使用crontab -e命令添加,退出后用/etc/init.d/crond restart命令重启crond进程,官方文件说不用重启进程,但我遇到不重启无法运行任务的情况。开始不知道/etc/crontab文件中的 run-parts是什么意思,直接把命令按照/etc/crontab的格式加上总是无法运行,后来才知道run-parts是指后面跟着的是文件夹。

2、Shell 小脚本

编辑一个.sh文件,以#!/bin/sh 开头

Sh 执行:

命令行执行:

注意:在cron定时任务执行下,echo ok是不会显示在屏幕上的。

问题:

bin/sh^M: bad interpreter: No such file or directory

原因是.sh脚本在windows系统下用记事本文件编写的。不同系统的编码格式引起的。解决:转变文件的编码格式

1、确保用户对文件有读写及执行权限 chmod

2、使用vi工具:set ff 或 :set fileformat查看,一般可以看到如下信息:

   fileformat=dos 或 fileformat=unix 

3 修改 :set ff=unix 或 :set fileformat=unix 

3、使用crontab,让linux定时执行shell脚本

# crontab –e

这样可以已编辑模式打开个人的crontab配置文件,然后加入一下这行:

0 0 * * * /home/liyulin/XXXXXXXX.sh

这将会在每天凌晨运行 指定的.sh文件

参考文献

http://www.cnblogs.com/kaituorensheng/p/4494321.html –linux定时执行脚本