悩みました。悩んでもらちがあかないので、色々試してようやく理由がわかりました。わかってしまえば簡単で、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の容量圧迫など問題にならない大きさですね。しかし、しっくりこないです。
思考には気をつけよう。いつ口に出してしまうかわからないから。
イアラ・ガッセン
投稿者プロフィール

最新の投稿
Raspberry Pi2023年11月30日Raspberry Pi zero 2 WからBluetoothで音楽を流す
ラーメン2023年11月26日ラーメン山岡家 ネギ味噌ラーメン
Windows2023年11月23日Windows11マシン不調
TrueNAS2023年11月17日TrueNAS SCALEサーバーのエラー
