Yosemiteでスクリプトを定期実行

[`evernote` not found]
Bookmark this on Hatena Bookmark
Share on Facebook
LINEで送る

Mac OS X では,スクリプトの定期的な実行に,以下の3つの方法があるらしい.

  • crontab –– 私の環境では,crontab –e で編集した結果が保存されなかった.
  • launchd –– ちょっとググった感じでは,スクリプトの登録にxmlの編集が必要そうでパス.
  • Automator+iCal –– launchdより楽そうと思って手を出したら,酷い手間がかかった.

とはいえ,Automator+iCalにトライした.

Automator

Automatorは,複数の手順を経て実行する作業をダブルクリックの一発にまとめるためのスクリプトメーカーという感じのアプリで,そのスクリプトをappファイルに落とせる.
後に出てくるiCalは,yosemiteでは「カレンダー」という名前になっているが,昔のiCalとは違ってスクリプトを直接実行させる選択肢がないっぽいので,Automatorを使わざるを得ない.
Automatorの実行環境はシェルとは異なるので,シェルの設定ファイルをスクリプト内で読み込ませるか,あるいは全てのコマンドをフルパスで書くような工夫が必要かも知れない.
macportsでssh,rsyncなどを入れている私は,フルパスで書くことにした.
rsyncからsshの秘密鍵ファイルを開いて公開鍵認証を空パスで実行するということをするためには,環境変数がどうもうまく動いていないっぽいので,こんな風に呼んでやらないといけない.
以下,macportsを/opt/usr/local/binに入れている場合.

#!/bin/sh
/opt/usr/local/bin/rsync -rptgoDz -e '/opt/usr/local/bin/ssh -i /Users/USERNAME/.ssh/id_rsa' --include 'Downloads/ここだけよ/' --exclude 'Downloads/*' /Users/USERNAME USERNAME@DESTSERVER:path/to/dir

ここで,rsyncのオプションに–aを使っていないのは,リモートがwindows系のファイルシステムになっている外付けHDDを使っていて,symbolic linkのコピーができずエラーを吐くため.
エラーが出てもコピーは実行されるが,Mac OS X上にエラーが通知されるのが不快なので,リンクはコピーしないことにした.
どうもrsyncでリンクをコピーしないというオプションがないっぽく(そもそも–lをつけなきゃいいんだし),オプションが長くなってしまった.
ついでにちょっと書いたincludeとexcludeは,rsyncのinclude/exclude指定が難しいので,備忘のため.
この辺の記事が,詳しい→rsync の複雑怪奇な exclude と include の適用手順を理解しよう - てっく煮ブログ

iCal

カレンダーとか一般名詞のアプリにされたせいで,こいつを識別して呼ぶのが難しくなって,今後はweb上のtipsが減っていくであろう,iCal.
どうでもいいけど,AndroidもMac OS Xも,アプリの名前をこういう一般名詞にしやがるせいで,一般人はおろか技術者でも技術文書の検索が難しくなってしまった.
バッドノウハウへのアクセス手段を断ってやるぜ,HEHEHE…という発想は分からんでもないが,使われんくなっては仕方なかろう.アホめ.

カレンダーというアプリがiCalのことだ,ということと,スケジュールの登録をして,通知方法をアプリ実行にすればいいんだということが分かれば,特段難しいことはない.
通知方法を複数書けるので,例えばDBのdumpとバックアップなどのように時間差をおいて実行したい手順を順に実行させるのに,2つもスケジュールを登録する必要はない.
iCalの頃は,iCalAlarmSchedulerとかいうのをMac OS Xログイン時に起動するようにしないといけなかったらしいが,どうもカレンダーになってからは不要のようだ.
iCalAlarmSchedulerをシステム環境設定の「ユーザとグループ」から起動項目に追加するという古い情報に踊らされて(しかも,昔はユーザとグループからではなくアカウントからだった),だいぶハマってしまった.
いちいち,設定項目の名前も変えんな,クソOSめ.

mac os xも使えるようにと動かしているが,使う度にクソOSだと思う.

One Reply to “Yosemiteでスクリプトを定期実行”

Comments are closed.