node服务的调度任务

# 实现思路

  • 引入 node-cron 包,这个包用来生成调度任务

  • 写一个定时执行的调度任务,需要注意的是要将这个任务的时区设置为中国时间,不然执行的时间不对

// 重启 mysql 服务的方法
function taskFunction() {
  const execStr = 'sudo systemctl restart mysqld.service';
  exec(execStr, (error, stdout, stderr) => {
    if (error) {
      console.error(`命令执行错误: ${error.message}`);
      return;
    }
    if (stderr) {
      console.error(`命令执行错误: ${stderr}`);
      return;
    }
    console.log(`命令执行成功: ${stdout}`);
  });
}

// 设置每天的 09:27 定时执行 重启 mysql 服务
export const scheduleTasks = () => {
  const time = '09:27';
  const [hour, minute] = time.split(':');
  const cronExpression = `${minute} ${hour} * * *`;
  cron.schedule(cronExpression, taskFunction, {
    scheduled: true,
    timezone: 'Asia/Shanghai',
  });
};
  • 在服务的主文件里面导入这个方法,并且执行即可
/**
 * @des 连接数据库
 */
import { scheduleTasks } from './scheduledTasks.mjs'; // 导入定时任务

/**
 * 其他服务的代码省略
 * ...
 */

// 执行定时任务
scheduleTasks();

/** ----------------------------------------------------开启服务监听---------------------------------------- */
app.listen(6005, () => {
  console.log('\x1b[35m%s\x1b[0m', 'mysql server working...');
});

export default app;