1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

cronを自由にカスタム可能にする

Last updated at Posted at 2023-09-08

背景

cron使ったら時間間隔やコマンドを書いておくと定期実行をやってくれるが、深夜は実行頻度下げてそれ以外の時間はいつも通りにしたいが、cronに書くやり方だけだと分からなかった。

あるかもしれないが、今後自由にカスタマイズできたほうが便利だと思うので作ってみることになった。

そういうGUIアプリあるが、自分用に便利なツールを作る

やり方

ざっくりいうと、Node.jsプログラムでcronファイルを作成する。

実行内容、実行間隔などを変数にして、cronファイルとして書き込んでしまえばいい。

cronファイルにcronファイルを作成するnode.jsプログラムを1分ごとに実行するコマンドを仕込んでおく。

プログラム

以下のようなコマンドのリストとなる配列を作成する。
「createExecTime」メソッドで、自由に定期実行間隔を作成しちゃえばいい。例えば実行するたびに時間を見て、深夜だったら定期実行時間を下げる数値をreturnしたらいい

あとは、上書きではなく追記である必要があるので「append」で書き込む。
※fsモジュールのappendをPromise使ったバージョンとかにしたメソッド作って呼び出す

anime-suko.ts
    const crontabCmdList = [
        "# 何かコメント",
        `*/${await createExecTime("機能名")} * * * *  コマンド`,
        // ・・・(以下省略)
    ]

    for (let i = 0; i < crontabCmdList.length; i++) {
        // 自作のファイル上書きメソッド
        await appendPromise(cronTabFilePath, crontabCmdList[i] + "\n")
    }

すると、きれいにcronファイルが作成できた。

今は1つのファイルにしているので、扱いやすくしたいならコマンド一覧をjsonにして外部ファイルにするのもありだと思う。

あと、createExecTime()メソッドに機能名のような引数を追加したら、機能ごとの時間が取得できるようになる。

機能ごとの時間とか、業務での開発だったら設定ファイルとかでまとめたほうが適切だとは思うが個人開発なので僕は直接配列にぶっこんでます。

世の中にあるGUIアプリによる定期実行もあるが、自分用のプログラムのほうがなんでも自由にカスタマイズできるので作ってよかった。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?