NodeCronで二つのタスクを実行させたら一方のタスクしか実行されなかった
verison
"forever": "^4.0.3", "node-cron": "^3.0.3"
起こったこと
NodeCronをForever上で実行しているUbuntuサーバーがある。
NodeCronでは以下のようなコードで実行している。
import cron from "node-cron"; import { execSync } from "child_process"; cron.schedule('*/5 * * * *', () => { console.log("alive monitoring"); execSync("cd ../alive_monitoring; npm run ping"); }); cron.schedule("0 7 * * 1-5", () => { console.log("get hogehoge new data"); execSync("cd ../get_hogehoge_new_data; npm run start"); });
しかし、ログではalive_monitering
しか表示されていなかった。
タスクの実行タイミングが重複している可能性
execSync
が悪いのか、それともNodeCron
が悪いのかはわからないけど、cronの実行タイミングが全く同じの場合だと一つしか実行されないのでは、という仮説のもと、ソースコードを以下に変更した。
そしたら動いた。
import cron from "node-cron"; import { execSync } from "child_process"; // タイミングが重複したときに一方しか実行されなさそうなため、秒単位で変更 cron.schedule('0 */5 * * * *', () => { console.log("alive monitoring"); execSync("cd ../alive_monitoring; npm run ping"); }); cron.schedule("1 0 7 * * 1-5", () => { console.log("get hogehoge new data"); execSync("cd ../get_hogehoge_new_data; npm run start"); });