指定時間になったらスクリプトを自動的に実行する(MacOS X)

■プログラム説明(ソースコード説明)
 AppleScriptを経由して処理を行います。特定のJavaScriptファイルを実行するには以下のように指定します。

do javascript file "実行するスクリプトファイルへのパス"

次に作成したファイルを保存します。サンプルではファイル名をexec_aijs.txtにしています。保存先のパスを覚えておきます。パスに日本語が含まれていると正常に動作しない可能性があります。「アプリケーション」→「ユーティリティ」フォルダ内にあるターミナルを起動し以下のコマンドを入力します。

crontab -e

 編集画面が表示されるのでiのキーを押して以下のように入力します。

0 9 * * * osascript /Volumes/Macintosh\ HD/exec_aijs.txt

 0 9が午前9時0分を示します。午後2時35分の場合は以下のようになります。

35 2 * * * osascript /Volumes/Macintosh\ HD/exec_aijs.txt

 入力が終わったらescキーを押してから以下のように入力します。

:wq

 これで設定が保存され午前9時に自動的にスクリプトが実行されるようになります。処理するスクリプトが連続して呼び出された場合などは先に呼び出されたものから処理されます。同時に1つしか処理できないため、他のスクリプト処理は待ち状態になります。また、別アカウント(ユーザー)で別々にIllustrator CSを起動させ処理させることも可能です。


■ソースコード(exec_aijs.txt)
tell application "Illustrator CS"
activate
do javascript file "Macintosh HD:sample.js"
end tell


■使い方
1:ターミナルを起動します。crontab -eと入力します。
2:iのキーを押します。インサートモードになります。
3:起動時間などを示す文字列を入力します。escキーを押してから:wqと入力します。これで以前の画面に戻ります。
4:crontab -lと入力します。
5:設定を確認します。指定時間になっても起動しない場合には指定している時間が正しいかどうか(24時間制)、osascriptで実行すべきAppleScriptファイルのパスがあっているかどうかを確認します。それでも動かない場合には再起動するか、ps -ax | grep "cron"と入力してcronが動作しているかどうか確認します。


■ポイント
 crontabは定期的に処理を行う処理を設定します。どのような定期的な処理が定義されているかは以下のコマンドを入力します。

crontab -l

 設定を変更する場合にはcrontab -eで編集します。iでインサートモード、escで解除、xでカーソル上の文字を削除できます。保存する場合にはescキーを押して:wqと入力しますが、保存せずに強制的に編集を中断する場合には:q!と入力します。

 サンプルで呼び出されるランダムに四角形を描くスクリプトは以下のようになります。このスクリプトのように日本語が含まれる場合にはUnicode (UTF-8ではない) で保存し改行コードをLF (UNIX)にしてください。Unicodeでない場合には動作しません。

pW = 600; // 四角形を生成する範囲(横幅)
pH = 800; // 四角形を生成する範囲(縦幅)
Num = 100; // 生成する数
sfName = "/randomRect.eps"; // 保存ファイルのパス
myColor = new RGBColor();
docObj = documents.add();
for (i=0; i<Num; i++)
{
myColor.red = Math.floor(Math.random() * 256);
myColor.green = Math.floor(Math.random() * 256);
myColor.blue = Math.floor(Math.random() * 256);
x = Math.random() * pW;
y = Math.random() * pH;
pathObj = docObj.pathItems.rectangle(0,0,100,100);
pathObj.stroked = false;
pathObj.filled = true;
pathObj.fillColor = myColor;
pathObj.translate(x,y);
}
epsOpt = new EPSSaveOptions();
epsOpt.compatibility = Compatibility.ILLUSTRATOR11;
saveFile = new File(sfName);
activeDocument.saveAs(saveFile, epsOpt);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);

■実際のスクリプトをダウンロード(sample.js.zip)