Launchd が Catalina で動かなかった理由

悩みました。悩んでもらちがあかないので、色々試してようやく理由がわかりました。わかってしまえば簡単で、 Catalina のセキュリティ設定でした。

経緯

内容については割愛しますが、 1 日に数回起動したいシェルスクリプトがありまして、それを macOS の最近の流れに従って launchd に登録してみました。ところが動きません。エラーを吐くように、 ErrorPath も指定してやってもエラーすら吐きません。

Console としばしにらめっこして、 Console に Service could not initialize と言うエラーメッセージが出ていることに気がつきました。検索してみたのですが、よく分かりません。 Catalina 以前の検索結果ばかりで、あまりしっくりくるものがありませんでした。私の探し方が悪かった可能性はあります。

解決

私は、ホームディレクトリにファイルを置くのは好きではありません。理由は簡単で、 iMac の SSD を容量圧迫させたくなかったためです。ほぼ全てのファイルを愛用している外付け HDD においています。アクセス速度が必要なファイルは( VM などですね ) 、 USB-C 接続の外付け SSD に入れています。

さて、問題のスクリプトも外付け HDD に入れてあります。これが原因でした

macOS のセキュリティ設定でフルディスクアクセスと言うのがあります。悪さをするアプリがディスクにアクセスするのを防ぐために、ユーザーにアプリがそのようなことをすることに関する許可を与えるようになっています。

外付け HDD にあるスクリプトは、この機構に引っかかってディスクアクセスできずにいたのですね。試しにスクリプトをホームディレクトリ直下においてみると、起動したときに「ディスクアクセスを許可するや否や!」というダイアログが出ます。ここで許可してやれば、スクリプトはきちんと動作します。

解決はしたけれど …

じゃ、外付け HDD のスクリプトにも許可を与えてやれば良いじゃないか。と言うことで、システム環境設定のところで外付け HDD のスクリプトを Drag&Drop して登録してみました。結論から言うと、最初のエラーを吐いて起動すらしてくれません。

ホームディレクトリ直下にフォルダを作ってそこにスクリプトを入れてやると動作します。どうもしっくりこないのですが、外付け HDD からの起動には何か別の認可の方法が必要なのかもしれません。

動いているので、文句はないのです。スクリプトそのものも数百バイトです。 SSD の容量圧迫など問題にならない大きさですね。しかし、しっくりこないです


思考には気をつけよう。いつ口に出してしまうかわからないから。

イアラ・ガッセン

投稿者プロフィール

會澤 賢一
新潟県在住。1964年生まれ、東京オリンピックの年ですね。
突然燃え上がったり、鎮火したり興味の波が激しいので注意が必要です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください