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の容量圧迫など問題にならない大きさですね。しかし、しっくりこないです


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

イアラ・ガッセン

投稿者プロフィール

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

コメントを残す

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

CAPTCHA


次の記事

FreeNAS 11.2-U8