Linux系统大部分系统管理工作都是通过定期自动执行某一个脚本来完成的, 那么如何定期执行某一个脚本呢? 这就要借助linux的cron功能了。cron是一个强大的任务计划程序, 它可以通过设定的时间运行命令实现任务脚本自动化, 有效提高开发人员以及系统运维人员的工作效率。
什么是计划任务?对于计算机运维人员来说,很多命令都是要重复执行的,这些重复执行的指令流程我们可以编写shell脚本统一执行,然而很多时候脚本要定时执行,比如每天某个时间执行一次数据库备份或者git统一push最新的代码。
Spring Task 的原理是在初始化 bean 时借助 ScheduledAnnotationBeanPostProcessor 拦截@Scheduled 注解所标识的方法,并根据每个方法及其注解配置构建相应的 Task 实例注册到 ScheduledTaskRegistrar 中,并在单例 bean 初始化完成后通过 afterSingletonsInstantiated 回调设置 ScheduledTaskRegistrar 中的调度器 TaskScheduler,其底层依赖于 jdk 并发包中的 ScheduledThreadPoolExecutor 实现,并在 afterPropertiesSet 时将所有 Task 添加到 TaskScheduler 中调度执行。
我们可以在该文件中写入一个计划任务,例如执行命令 touch /tmp/crontab,那么我们在末尾添加 * * * root touch /tmp/crontab,保存,等候一分钟,如果以特定用户创建计划任务,我们可以使用 crontab-e 命令来编辑。
当 MySQL 主从复制在 show slave status\G 时出现 Slave_IO_Running 或 Slave_SQL_Running 的值不为YES时,需要首先通过 stop slave 来停止从服务器,然后再执行一次上一步操作即可恢复。