はてブロ@ama_ch

https://twitter.com/ama_ch

AppleScriptをコマンドラインから定期的に実行したい

マカーなら1度はAppleScriptのお世話になりますよね!
僕がよく使っているのは、あるアプリケーションを再起動するAppleScriptです。そのアプリケーションはよく不安定になるので、1日に何回も再起動しています。
終了→再起動の2ステップがスクリプト実行の1ステップになって快適・・・なんだけど、スクリプトの実行がめんどくさい!何回も実行するのはめんどくさい!よし、自動化のお勉強をしよう!!!

コマンドラインからAppleScriptを実行

今までLaunchBarとかスクリプトエディタで実行していたけど、自動化するならコマンドラインから実行しないといけません。
シン石丸の電脳芸事ニッキ: コマンドラインからAppleScriptを実行し引数でパラメータを渡す
こちらでその方法が解説されています。

% osascript hoge.scpt

あ、これだけで実行できるんですね。

コマンドのスケジュール実行

やったことないから調べよう><
・・・えーと、cronというものを使うと幸せになれるみたいです。

cronは、UNIX系OSに、装備されている自動実行ツールの一つです。
指定したタイミングで、繰り返し実行されるので、よく使われます。
デフォルトでも、各種ログの、整理を行っています。

http://homepage1.nifty.com/cra/linux/cron.html

素敵な雰囲気がします!
タイミングやコマンドは、crontabというファイルに記述します。
コマンドcrontab -eで現在のユーザーのcrontabをエディタで開くことができます。

% crontab -e    # エディタでcrontabを開く

エディタが開くので、以下のように記述します。

# +------------ 分 (0 - 59)
# | +---------- 時 (0 - 23)
# | | +-------- 日 (1 - 31)
# | | | +------ 月 (1 - 12)
# | | | | +---- 曜日 (0 - 6) (日曜日=0)
# | | | | |
# * * * * * 実行されるコマンド

# 30分おきに以下のシェルスクリプトを実行
*/30  *  *  *  * /Users/ama-ch/scripts/relaunch.zsh

crontab - Wikipedia
crontabの書き方 ― server-memo.net
このあたりを参考にさせていただきました。


30分ごとにrelaunch.zshというスクリプトを実行するようにしました。
relaunch.zshの中身はこんな感じ↓

osascript ~/applescripts/reLaunch.scpt    # あるアプリケーションを再起動するAppleScriptを実行
date "+%Y.%m.%d  %H:%M:%S" > ~/scripts/relaunch.log    # 実行時間をログに吐く

コマンドを2つ実行するだけの簡単なものです。


あとはcrontabを保存して、cronコマンドを実行・・・はしなくて良いみたいです。

% sudo cron                                                                                    [~]
Password:
cron: cron already running, pid: 2341
% ps -p 2341                                                                                   [~]
  PID TTY           TIME CMD
 2341 ??         0:00.03 /usr/sbin/cron

最初からバックグラウンドで動いてるのかな?
crontabに記述したコマンド(relaunch.zsh)がちゃんと実行されているか、ログを監視してみます。

% tail -f ~/scripts/relaunch.log
2009.01.17  12:00:05
2009.01.17  12:30:04
2009.01.17  13:00:03

30分おきに実行されているのがわかりますね!
cronたんが勝手に再起動してくれるようになったので、これからは自分で再起動しなくても良くなりました。やったね!

まとめ

  • AppleScriptはosascriptコマンドで実行できる
  • 自動実行はcronで幸せ
  • 「crontab -e」でエディタを開き、スケジュールとコマンドを記述する
  • 「crontab -l」でcrontabの内容が確認できる