工作中经常用到crontab定时执行任务,比如定时备份任务,定时迁移数据等等。但crontab中的一些细节,还要注意到的,否则即使当时知道了,时间长了,在建个定时任务还是有细节问题耽误时间得不偿失,先记录下contab建立任务过程和遇到的问题。
- 编写demo脚本a.sh,例如:
#!/bin/bash
echo "Hello World!"
- 在终端中输入以下命令打开crontab配置文件:
crontab -e
- 在打开的文件中,添加以下一行代码:
0 0 * * * /path/to/a.sh >> /path/to/log.txt 2>&1
其中,/path/to/a.sh
为脚本的绝对路径,/path/to/log.txt
为日志文件的绝对路径。这行代码的意思是,在每天的0点0分执行脚本a.sh,并将输出追加到log.txt文件中。
- 保存并退出crontab配置文件。
- 检查crontab是否已经成功配置,可以使用以下命令:
crontab -l
该命令会列出当前用户的所有crontab任务,确认是否正确添加了刚才的任务。
- 等待到达指定时间(每天晚上12点),查看log.txt文件中是否有输出。如果没有,请检查脚本路径和日志路径是否正确,以及脚本是否有执行权限。
- 如果需要实时查看日志文件,可以使用以下命令:
tail -f /path/to/log.txt
该命令会动态展示log.txt文件的最新内容。
这里会遇到可能的问题纠正如下
如果脚本没有自动执行,可能有以下几个原因:
- crontab服务没有开启。你可以使用以下命令检查crontab服务是否开启:
systemctl status cron
如果服务没有开启,可以使用以下命令启动服务:
systemctl start cron
并且设置开机自启动:
systemctl enable cron
- crontab任务设置错误。请确保你的crontab任务设置正确,可以使用以下命令查看当前用户的crontab任务:
crontab -l
如果任务设置正确,应该能看到刚才添加的任务。
- 脚本没有执行权限。请使用以下命令给脚本添加可执行权限:
chmod +x /path/to/a.sh
至于log.txt文件,如果不存在,则会自动创建。但是,如果指定的路径不存在,就需要手动创建路径。
总结:建立时间要准确理解0 0 * * * => 0分 0时 * * *,且任务中执行的脚本需要有执行权限。写到日志的方法>> /path/to/log.txt 2>&1 。这就可以应对绝大部分的定时任务实际需求了。