一、crontab概述
crontab是在Linux和Mac OS X系统中用来实现定时任务的系统工具,可以在指定时间执行指定的任务或脚本文件。crontab的本质是用一些文件来描述哪些工作需要在何时进行,而且可以支持每分钟、每小时、每天、每星期等不同的执行频率。
在Linux系统中,crontab任务会在后台常驻,按照设定的时间周期自动触发执行。
二、如何使用crontab每分钟执行一次任务
crontab支持多种参数定义方式,用来指定任务执行的时间和周期。在设定每分钟执行一次任务时,我们可以在crontab文件中添加如下定义:
* * * * * [command]
[command]是指需要执行的任务或脚本文件,* * * * *表示每分钟都会调度一次。
例如,如果我们要每分钟检查一下指定目录是否有新增文件,那么可以编写如下的shell脚本文件:
#!/bin/bash dir_path=/data/files # 查找新增的文件 for file in $(find $dir_path -type f -newermt '1 minutes ago'); do echo "New file found: $file" done
将上述脚本保存为check_file.sh,然后编辑crontab文件,添加如下一行定义:
* * * * * /bin/bash /path/to/check_file.sh
保存文件并退出,这样每分钟都会执行我们编写的脚本文件,检查指定目录中是否有新增文件,并将新增的文件名打印出来。
三、指定crontab执行时间的格式
crontab的时间格式大致如下:
* * * * * - - - - - | | | | | | | | | ----- 周几 (0 - 6) (0表示周日,1表示周一,以此类推) | | | ------- 月份 (1 - 12) | | --------- 日 (1 - 31) | ----------- 小时 (0 - 23) ------------- 分钟 (0 - 59)
例如,如果我们想让crontab在每天晚上十点执行我们的脚本文件,可以将crontab文件中的定义修改为:
* 22 * * * /bin/bash /path/to/my_script.sh
这样就可以让crontab在每天22点执行我们的脚本文件了。当然,也可以使用类似于"* * * * *"这样的格式,让crontab每分钟都执行。
四、其他常用的crontab时间设置示例
每小时执行一次:
0 * * * * /bin/bash /path/to/my_script.sh
每天的早上5点执行一次:
0 5 * * * /bin/bash /path/to/my_script.sh
每周一的上午9点执行一次:
0 9 * * 1 /bin/bash /path/to/my_script.sh
五、注意事项和常见问题解决方法
在使用crontab执行任务时,需要注意以下几点:
- crontab执行的任务需要具有可执行权限;
- crontab执行的任务需要使用绝对路径,否则可能会出现执行失败的情况;
- crontab默认会将任务的输出结果发送到当前用户的邮件中,可以使用重定向符号将其输出到指定的文件或者/dev/null中;
- 可以使用crontab -l命令来查看当前用户的crontab执行列表;
- 可以使用crontab -e命令来编辑当前用户的crontab文件;
- 执行crontab任务时需要注意启动脚本的环境问题,可以在脚本文件中添加设置环境变量的命令,如export PATH=/usr/local/bin:$PATH等。
如果遇到执行失败的情况,可以通过查看系统的日志文件/var/log/cron来查找解决办法。