問題タブ [launchd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - OSXでプログラムを自動的に起動するにはどうすればよいですか?
Mac の起動時に自動的に開きたい小さなプログラムがあります。
このプログラムはコマンドライン引数を受け入れるため、システム設定/アカウント/ログイン項目に移動してそこに追加するだけでは簡単ではありません...
Google から、ユーザーのホーム フォルダーに .profile ファイルを作成できることを読みました。これにより、その中に入れたものは何でも実行されます...だから、〜に .profile ページがあります。
-rw-r--r--@ 1 マット スタッフ 27 27 9 月 13:36 .profile
これを含む...
/アプリケーション/mousefix 3.5
しかし、起動時に実行されません! 「/Applications/mousefix 3.5」を端末に手動で入力すると、機能します。
何か案は?
python - Mac OS X のログイン項目に登録されているが、シェル スクリプトが自動的に実行されない
「ログイン項目」設定に次のシェル スクリプトを登録しましたが、効果がないようです。これは moinmoin wiki を起動するためのものですが、端末ウィンドウから手動で実行した場合にのみ機能し、その後はマシンが次にシャットダウンされるまで実行されます。
再起動後にWikiを利用できるようにしたいので、これを理解するための助けをいただければ幸いです.
c - BetterAuthorizationSample を使用している人はいますか?
OS X では、Apple が 2 つの推奨事項を公開した AuthorizationExecuteWithPrivileges() を介して特権操作が行われます。
setuid ヘルパー ツールを使用する古い MoreAuth。
システムに launchd ファイルを散らかしている現在の BetterAuthorizationSample。
後者を使用するアプリケーションは知りません...
macos - Launchctl を使用して Subversion を開始できません
Launchctl を使用して svnserve プロセスを起動しようとしていますが、"no plist was returned for:/Library/LaunchAgents/org.tigris.subversion.svnserve.plist" というエラーが表示され続けます。これは svnserve の場所 /opt/local/bin/svnserve であり、これは plist ファイルです。
cocoa - アプリを開いたら、起動したタスクを停止します
アプリケーションが開いているときに起動されたタスクを停止し、アプリケーションが閉じられたときに再開する方法があるかどうか疑問に思っています。私のlaunchdタスクは、ファイルが変更されたときに通知され、そのファイルでUNIXコードを実行するように設定されています。ただし、私のアプリケーションはこのファイルに多くの変更を加えるため、アプリを開いているときにタスクを実行することはできません(そうでない場合、ファイルが変更されるたびにUNIXコードが実行されます。これは良くありません)。これを行うためのさまざまな方法の長所と短所はありますか(方法が見つかりませんでしたが)?
助けてくれてありがとう。
objective-c - Cocoa 分散オブジェクト、ロング ポーリング、launchd、およびアクティビティ モニターでの「応答なし」
シナリオ:
Mac アプリケーションと launchd デーモン (Foundation クラスで作成) の間に分散オブジェクトベースの IPC があります。非同期メッセージングに関して以前に問題があったため (たとえば、サーバーのルート オブジェクトに registerClient: があり、サーバーのルート オブジェクトがクライアントのプロキシ オブジェクトのメソッドを通知/呼び出しするイベントがあるときはいつでも)、ロング ポーリングを行いました。クライアントは、デーモンからのイベント/通知のリストを「収集」します。この「収集」は、サーバー オブジェクト メソッド呼び出しによって行われ、NSArray インスタンスが返されます。
数秒間、サーバー オブジェクトのプロセス (launchd を介して起動された) の横に "(応答なし)" タグが付けられた赤いラベルが付けられます (アクティビティ モニター内)。私が言ったように、機能的にはうまく機能しますが、この「応答なし」ラベルを取り除きたいだけです。
この「応答なし」タグを防ぐにはどうすればよいですか?
参考までに、以前にlaunchdベースのプロセスを実行しましたが、ロングポーリングを実行したのはこれが初めてです。また、NSSocketPortNameServer ベースの接続と NSSocketPort ベースの接続も試しました。彼らにはこの問題はありませんでした。ロックも問題ではありませんでした。使用されているロックは NSCondition だけのものであり、プログラムをログに記録してデバッグしたところ、ロックの「問題」はハーベスティング部分だけであり、実際には機能的に機能しているようです。また、クライアント プロセスは PyObjC で記述され、サーバー プロセスは ObjC で記述されます。
前もって感謝します。
cocoa - 呼び出し元システム("開く") により、アプリが root として起動されることがあります
を使用して別のプロセスを起動するアプリケーション (正確には /Library/StartupItems 内のデーモン) をルートとして実行していsystem("open /Applications/MyAppName.app")
ます。これは、特定のコンピューターで MyAppName が現在のユーザーの下ではなく、ルートとして実行されることを除いて、正常に機能します。
これがなぜなのか、アプリケーションを常に現在のユーザーとして起動する方法を理解しようとしています。
この問題は、Open/Active ディレクトリの組み合わせを実行しているエンタープライズ サイトで発生するようです。私はこれらのマシンへのアクセスがいくらか制限されているので、より多くの時間を要求する前に、少なくともいくつかの仮説を立てようとしています.
私が持っているもう1つの手がかりは、これらのコンピューターの少なくとも1つで、アクティビティモニターを開いて「Finder」プロセスを調べると、「ユーザー:」セクションにはユーザー名が表示されますが、ユーザーIDは表示されないということです(「(UID)」セクション完全に欠落しています)。
また、親プロセスは、ほとんどの標準アプリケーションのようにlaunchd (1)
" " ではなく" " として表示されます。launchd (95)
このlaunchdのインスタンスは、ログインユーザーとして実行されるlaunchdの他のインスタンスと比較して、コンピューターが起動されてルートとして実行されるたびに最初に起動される実行であると私は信じています。
明らかなセキュリティ上の懸念に加えて、同時にログインしている 2 人のユーザーに対して開いたり、表示したりできるように、アプリケーションを root として実行しないようにする必要があります。
これを引き起こしている可能性のあるもの、またはそれを解決する方法について何か考えがある人はいますか?
cocoa - 管理者以外のユーザーがエージェントを無効にしないように、ユーザーごとのGUI起動エージェントを保護するにはどうすればよいですか?
私はlaunchdデーモンのペアを持っています。そのうちの1つは真のデーモン(rootとして実行)であり、もう1つはGUIセッションごとに実行されるGUIエージェント(セッションタイプAqua)です。
管理者レベル以外のユーザーがlaunchctlを使用してユーザーレベルのエージェントを無効にできないようにするか、少なくともルートレベルのデーモンからエージェントをリロードする方法を理解する必要があります。
私がこれまでに見つけた最高の記事はこれですが、それは実際には明確な解決策を提供していません。
最も簡単な方法は、ルートデーモンで現在のコンソールユーザーを定期的にフェッチしてからlaunchctl load ...
そのユーザーとして実行することですが、それが可能であるかどうか/これをどのように実行するか(ユーザーを装わずにデーモンを使用すると、rootユーザーの下にロードされますが、これは役に立ちません)。
何か案は?
macos - GUIセッションを持つすべてのユーザーの起動エージェントの開始/停止
ルートレベルのデーモンからセッションごとのGUIエージェントを開始/停止できる必要があります。
私がやりたいのは基本的に
ただし、これは1つのインスタンスのみを開始/停止し、現在のGUIセッションでrootとして実行されます。sudoをオフにしておくと、開始します
bsexecの他のさまざまな順列をいじってみましたが(load / unloadコマンドを使用してbsexecからセカンダリスクリプトを呼び出すことを含む)、インスタンスをroot以外のものとして起動したり、別のGUIセッションで起動したりすることはできません。 。
私もとをいじってみましたが、そこでも運がsu - <user> ...
ありsudo -u <user> ...
ませんでした(多くの人が上記のリンクされた記事や他の場所で議論しているように)。
誰か考えがありますか?
編集:Graham Leeが以下に提案するように、ラッパーツールを使用してこれを実行しようとしましたが、次のエラーが発生します。
これは、私が使用しているコマンドラインコマンド、ラッパー、およびスクリプトです(501はユーザーIDであり、63093はシステムにログインしている別のユーザーのlaunchdのpidです)。
コマンドライン:
ラッパー:
脚本:
cocoa - Cocoa で特権ファイルの読み取り/書き込みを行うには、launchd デーモンが最適な方法ですか?
Any User/Current host プリファレンス ファイル (Preferences Utilities Reference に従って管理者権限が必要) に書き込み、plist (root のみが書き込み可能) を介して launchd エージェントを有効/無効にする必要があるアプリケーションがあります。
SFAuthorizationView
これらの値を変更する前に、ユーザーに管理者として認証することを要求するために使用しています。
これらの値を実際に変更する最善の方法を決定しようとしています。
安価なハックのオプションは、BLAuthentication を介して、または自分で似たようなものを作成して、AuthorizationExecuteWithPrivileges()
andmv
またはを使用するようです。defaults
これのマイナス面は、実行しているコマンド ライン アプリの戻り値が得られないことと、遭遇した奇妙な難解なバグ (特定の状況で -60008 エラーが発生するなど) です。明らかに、これは Apple によって強く推奨されていますが、人々は実際にそれを行い、ある程度の成功を収めているようです。
--self-repair
2 番目にハックなオプションは、さまざまな場所で説明されているように、suid ビットを設定してオプションを使用してヘルパー アプリを作成することです。これは可能に思えますが、おそらく 3 番目のオプションよりも問題が少ないとは言えません。
launchd
3 番目のオプションは、ルートとして実行され、ソケットを介してアプリケーションと通信する本格的なデーモンを作成することです。これは、いくつかの plist ファイルを読み書きするのは少しやり過ぎのように思えますが、将来的には他の用途を見つける可能性もあり、それが私のアプリケーションの唯一のデーモンではないので、単に別のものを追加します。
このサンプル コードを自分の目的に合わせて変更することを考えています。
私の2つの質問は次のとおりです。
launchd デーモン オプションは、これに最適なルートのように思えますか、それとももっと簡単なルートがありませんか?
他の誰かがそのコードを似たようなものの基礎としてうまく使っていますか? テストアプリで問題なく使用できましたが、皆さんの意見を聞きたいです。