如何写一个定时执行的shell脚本

本文介绍如何在ThinkPHP5中设置定时任务,通过Crontab实现每5分钟执行一次数据库轮询的脚本。涵盖了Crontab的基本语法、安装与设置,以及如何编辑、查看和删除定时任务。

前言:

项目功能需要做一个两阶段的轮询数据库的表,于是要写一个定时执行 tp5 的一个命令,怎么实现的可以看看 官方手册

php think command

Linux 定时脚本

我使用的是 crontab 包,检查crontab并将crontab设置为开机自启 。

# 查看crontab下的定时器任务,报错的话就去安装 crontab
crontab -l
# 使用chkconfig设置crontab为开机启动启动,ubuntu好像默认不支持这个工具,自己安装咯
chkconfig crond on
# 这样条命令似乎也可以,没有测试过
systemctl enable crond 

crontab命令说明如下:

  • -e:编辑该用户的计时器设置;
  • -l:列出该用户的计时器设置;
  • -r:删除该用户的计时器设置;
  • -u <用户名称>:指定要设定计时器的用户名称。

crontab定时任务语法如下:

minute   hour   day   month   week   command     顺序:分 时 日 月 周

说明

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

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如 month 字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在 minute 字段,表示每十分钟执行一次。

详细可看看这里 

如此,我要设计每 5 分钟执行一次脚本,crontab的任务就应该这么写:

*/5 * * * * /xxx/backup.sh

提一下,新建的 shell 记得添加可执行权限。

chmod +x xxx.sh

 

<think>首先,用户的问题是基于提供的引用内容,他们想编一个每天定时执行指定文件的定时任务shell脚本。引用内容给出了几个例子,如何使用crontab设置定时任务。 关键点: - 用户想每天定时执行一个特定的文件(可能是脚本文件)。 - 脚本应该使用crontab来设置。 - 引用中提到了crontab -e 来编辑定时任务,指定时间如0 12 * * * 表示每天12点。 - 还提到了编shell脚本文件,赋予执行权限,然后用crontab添加任务。 我的回应需要: - 使用中文回答。 - 结构清晰,帮助用户逐步解决问题。 - 确保真实可靠。 - 所有数学表达式用$...$或$$...$$格式,但这里可能没有数学内容,所以可能不需要。 - 在回答末尾生成相关问题。 - 引用的段落末尾添加引用标识,如[^1]。 步骤分解: 1. **理解需求**:用户想创建一个shell脚本,该脚本每天定时执行一个指定的文件。这个文件可能是另一个脚本或可执行文件。 2. **核心方法**:使用crontab设置定时任务。crontab是Linux系统中用于定时执行任务的工具。 3. **参考引用**: - 引用[1]:设置crontab定时任务,例如0 12 * * * sh test.sh > test.log 表示每天12点执行test.sh脚本。 - 引用[2]:编shell脚本(如hello.sh),赋予权限(chmod 755),然后在crontab中添加任务(如*/5 * * * * root /www/hello.sh)。 - 引用[3]:创建cron脚本文件,添加定时任务。 - 引用[4]:Shell脚本开头需要#!/bin/bash。 - 引用[5]:使用while循环实现定时执行,但crontab更标准。 4. **推荐方法**:使用crontab是最简单和标准的做法,而不是引用[5]的while循环,因为它更高效。 回答结构: - **引言**:简要介绍crontab的作用。 - **步骤**:逐步指导如何创建定时任务。 - 步骤1:编执行shell脚本文件(指定文件)。 - 步骤2:赋予脚本执行权限。 - 步骤3:编辑crontab文件添加定时任务。 - 步骤4:指定时间格式(如每天12点)。 - 步骤5:验证定时任务。 - **示例**:给出一个完整的示例脚本和crontab条目。 - **注意事项**:提醒权限、日志等。 - **相关问题**:在末尾生成相关问题。 确保真实可靠: - 基于Linux标准知识:crontab语法正确。 - 引用参考内容:在相关部分添加引用标识。 生成相关问题: - 基于主题,如如何调试定时任务、其他时间设置、错误处理等。 最终回答格式: - 使用中文。 - 清晰结构。 - 末尾添加相关问题。 </think>### 每天定时执行指定文件的定时任务shell脚本指南 在Linux系统中,使用`crontab`工具可以轻松实现每天定时执行指定文件(如Shell脚本)的需求。`crontab`允许您设置基于时间的调度任务,无需复杂的循环逻辑。以下是基于引用内容的详细步骤指南,确保过程真实可靠(参考Linux标准实践)。 #### 步骤1: 创建要执行Shell脚本文件 首先,编一个Shell脚本文件(例如`daily_task.sh`),该文件包含您希望每天执行的命令。脚本必须以`#!/bin/bash`开头,以指定解释器。假设您的指定文件是`/path/to/your_script.sh`,您可以创建一个包装脚本来调用它。 示例脚本 (`daily_task.sh`): ```bash #!/bin/bash # 这是一个每天定时执行指定文件的示例脚本 echo "任务开始执行: $(date)" # 添加日志输出以便追踪 sh /path/to/your_script.sh # 替换为您的实际文件路径 echo "任务执行完成: $(date)" >> /var/log/daily_task.log # 记录执行日志 ``` 注意事项: - 替换`/path/to/your_script.sh`为您的实际文件路径。 - 脚本开头必须包含`#!/bin/bash`,确保系统能正确解析[^4]。 - 添加日志输出(如`>> /var/log/daily_task.log`),有助于调试任务执行情况。 #### 步骤2: 赋予脚本执行权限 在Linux中,您需要赋予脚本文件可执行权限,否则crontab无法运行它。使用`chmod`命令: ```bash chmod 755 daily_task.sh ``` - `755`权限表示所有者可读执行,其他用户可读执行(确保安全)[^2]。 #### 步骤3: 添加crontab定时任务 使用`crontab -e`命令编辑当前用户的定时任务配置文件。crontab语法为: ``` * * * * * command_to_execute ``` - 五个时间字段分别代表:分钟、小时、日、月、星期。 - 对于每天定时执行(如每天中午12点),使用`0 12 * * *`。 添加任务条目: ```bash crontab -e # 打开编辑器 # 在文件末尾添加以下行(示例为每天12点执行) 0 12 * * * /path/to/daily_task.sh > /var/log/cron.log 2>&1 ``` - `/path/to/daily_task.sh`是您在步骤1创建的脚本路径。 - `> /var/log/cron.log 2>&1`将标准输出和错误重定向到日志文件,便于检查执行结果[^1]。 - 保存并退出编辑器(在vim中按`:wq`)。 #### 步骤4: 验证定时任务 添加任务后,检查是否设置成功: ```bash crontab -l # 列出当前用户的定时任务 ``` - 如果看到`0 12 * * * /path/to/daily_task.sh ...`,表示任务已添加。 - 检查日志文件(如`/var/log/cron.log`),确认任务执行状态[^3]。 #### 完整示例场景 假设您有一个文件`/home/user/backup.sh`需要每天凌晨3点执行: 1. **创建包装脚本** (`daily_backup.sh`): ```bash #!/bin/bash echo "备份开始: $(date)" >> /var/log/backup.log sh /home/user/backup.sh # 执行指定文件 echo "备份结束: $(date)" >> /var/log/backup.log ``` 2. **赋予权限**: ```bash chmod 755 daily_backup.sh ``` 3. **添加crontab任务**: ```bash crontab -e # 添加行: 0 3 * * * /path/to/daily_backup.sh > /var/log/cron_backup.log 2>&1 ``` 4. **验证**: ```bash crontab -l # 应显示任务条目 ``` #### 注意事项 - **路径问题**:crontab运行时环境变量可能不同,建议在脚本中使用绝对路径(如`/usr/bin/sh`代替`sh`)。 - **权限控制**:确保crontab运行的用户(如root或普通用户)有权访问脚本和日志文件。 - **错误处理**:添加日志重定向(如`2>&1`)能捕获错误信息[^1]。 - **时间格式**:crontab使用UTC时间,若需本地时间,请在脚本中处理时区[^5]。 通过以上步骤,您可以可靠地实现每天定时执行指定文件的定时任务。如果任务未执行,检查系统日志(`/var/log/syslog`)以排查问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值