Macから決まった時間にLINEに通知を送る

1年ぶりくらいにやろうとしたらハマってしまったのでめも。ほぼ at コマンドのせい。

LINE Notify の設定

これについては LINE の中の人がとても分かりやすくかいて下さっているので簡単。以前つくったアクセスキーは再表示できないので忘れてたら新しく作る。

developers.linecorp.com

at コマンドの使い方

上記のリンク先にある curl コマンドを、 at コマンドで決まった時間に実行したい。まず、 at コマンドでジョブを登録しても Mac ではデフォルトではジョブが実行されない *1 ので、有効化する。以下のリンク先を参照。

blog.hello-world.jp.net

リンク先にあるように、有効化するコマンドは以下。

sudo launchctl unload -F /System/Library/LaunchDaemons/com.apple.atrun.plist
sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist

既に過ぎた時間にジョブが登録されていた場合、上記のコマンドを実行した途端に一気にジョブが流れるようで、LINEに通知が鬼のように来た。

もう一つのハマりポイントは at コマンドの難しさ。定期的に行うジョブは cron に登録したり、何分後に実行とかの場合は sleep を使ったりすることも多く、 at はあまり使う機会がないためかいつまで経っても慣れない。とりあえず私の環境では以下のような感じなら動いた。

at -m -f notify_me.sh "0:00 022318"

notify_me.sh に LINE に通知するコマンドが書いてある。 -m オプションは結果をメールするためのもの。時刻の指定が難しく、間違うと「garbled time」とかって怒られる。ネット上の情報だと時刻の文字列はどこに書いても動くようだったが、 Mac だと一番最後に書かないと動かない? つまり、

at "0:00 022318" -m -f notify_me.sh 

ではダメだった。

*1:FreeBSDの仕様?