问题标签 [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.

0 投票
7 回答
2953 浏览

macos - 如何让程序在 OSX 中自动启动?

我有一个小程序,我想在我的 mac 启动时自动打开它。

因为这个程序接受命令行参数,它不像只是去系统首选项/帐户/登录项并将其添加到那里那么简单......

从谷歌,我读到我可以在用户的​​主文件夹中创建一个 .profile 文件,这将执行我放入其中的任何内容......所以我在 ~ 中有一个 .profile 页面,如下所示:

-rw-r--r--@ 1 马特员工 9 月 27 日 27 日 13:36 .profile

包含这个...

/应用程序/鼠标修复 3.5

但它不会在启动时执行!如果我在终端中手动输入“/Applications/mousefix 3.5”,它确实可以工作。

有任何想法吗?

0 投票
4 回答
2604 浏览

python - 尽管在 Mac OS X 登录项中注册了 Shell 脚本,但它不会自动运行

我在“登录项”首选项中注册了以下 shell 脚本,但它似乎没有任何效果。它旨在启动 moinmoin wiki,但仅在从终端窗口手动运行时才有效,之后它会一直运行直到机器下一次关闭。

我真的希望 Wiki 在重新启动后可用,因此在理解这一点方面的任何帮助将不胜感激。

0 投票
2 回答
418 浏览

c - 有人使用 BetterAuthorizationSample 吗?

在 OS X 上,特权操作是通过 AuthorizationExecuteWithPrivileges() 完成的,Apple 发布了两个建议:

旧的 MoreAuth 使用 setuid 辅助工具。

当前的 BetterAuthorizationSample 用 launchd 文件在系统中乱扔垃圾。

我不知道使用后者的任何应用程序...

0 投票
1 回答
4948 浏览

macos - 无法使用 Launchctl 启动颠覆

我正在尝试使用 Launchctl 启动 svnserve 进程,但我一直收到错误消息“没有返回 plist:/Library/LaunchAgents/org.tigris.subversion.svnserve.plist”。这是 svnserve 是 /opt/local/bin/svnserve 的地方,这是 plist 文件有什么想法这里可能有问题吗?

0 投票
3 回答
941 浏览

cocoa - 打开应用程序时停止启动的任务

我想知道是否有某种方法可以在应用程序打开时停止启动任务,然后在应用程序关闭时再次启动它。我的 launchd 任务设置为在文件更改时收到通知,然后对文件执行一些 UNIX 代码。但是,我的应用程序对此文件进行了很多更改,因此当我的应用程序打开时我无法运行任务(否则每次更改文件时它都会运行 UNIX 代码,这不好)。执行此操作的不同方法是否有优缺点(即使我还没有找到任何方法)?

谢谢你的帮助。

0 投票
3 回答
946 浏览

objective-c - 活动监视器中的 Cocoa 分布式对象、长轮询、launchd 和“无响应”

设想:

我在 mac 应用程序和 launchd 守护程序(用 Foundation 类编写)之间有一个基于分布式对象的 IPC。由于我之前遇到过关于异步消息传递的问题(例如,我有一个 registerClient: 在服务器的根对象上,并且每当发生事件时服务器的根对象通知/调用客户端代理对象中的方法),我进行了长轮询,这意味着客户端“收获”来自守护进程的事件/通知列表。这种“收获”是通过服务器对象方法调用完成的,然后返回一个 NSArray 实例。

它工作得很好,直到几秒钟后,服务器对象的进程(通过 launchd 启动)开始被标记为红色,旁边有“(未响应)”标签(在活动监视器内)。就像我说的,在功能上,它运作良好,但我们只是想摆脱这个“不响应”的标签。

如何防止出现此“未响应”标签?

仅供参考,我之前已经做过基于启动的流程,这是我第一次进行长轮询。此外,我尝试了基于 NSSocketPortNameServer 的连接以及基于 NSSocketPort 的连接。他们没有这个问题。锁定也不是问题,因为使用的锁只是 NSCondition 的,我们记录并调试了程序,似乎唯一的锁定“问题”在收获部分,实际上,在功能上有效。此外,客户端进程是用 PyObjC 编写的,而服务器进程是使用 ObjC 编写的。

提前致谢。

0 投票
1 回答
277 浏览

cocoa - 调用系统(“打开") 有时会导致应用程序以 root 身份启动

我有一个应用程序(准确地说是 /Library/StartupItems 中的一个守护进程)以 root 身份运行,它偶尔会使用system("open /Applications/MyAppName.app"). 这工作正常,除了在某些计算机上 MyAppName 以 root 身份启动,而不是在当前用户下运行。

我试图弄清楚为什么会这样,以及如何让应用程序始终以当前用户身份启动。

该问题似乎出现在运行某种 Open/Active Directory 组合的企业站点上。我对这些机器的访问有些有限,所以在我请求更多时间之前,我试图至少形成一些假设。

我的另一个线索是,如果您打开活动监视器并检查“Finder”进程,至少在其中一台计算机上,“用户:”部分显示用户名但没有用户 ID(“(UID)”部分完全不见了)。

此外,父进程显示为“ launchd (1)”,而不是launchd (95)像大多数标准应用程序那样显示为“”。与以登录用户身份运行的另一个 launchd 实例相比,我相信这个 launchd 实例是每次计算机启动并以 root 身份运行时首先启动的运行。

除了明显的安全问题外,我还需要应用程序不以 root 身份运行,以便它支持诸如对两个同时登录的用户开放/可见的功能。

有人对可能导致此问题的原因或我如何解决此问题有任何想法吗?

0 投票
1 回答
416 浏览

cocoa - 如何保护每用户 GUI 启动代理免受非管理员用户禁用它?

我有一对 launchd 守护进程,其中一个是真正的守护进程(以 root 身份运行),其中一个是基于 GUI 会话运行的 GUI 代理(会话类型 Aqua)。

我需要防止非管理员级别的用户使用launchctl禁用用户级别的代理,或者至少弄清楚如何从根级别的守护进程重新加载代理。

到目前为止我发现的最好的文章是这篇文章但它并没有真正提供任何明确的解决方案。

最简单的方法似乎是在根守护程序中定期获取当前控制台用户,然后launchctl load ...以该用户身份运行,但我不完全是否可能/我将如何解决这个问题(如果我只是从daemon 不冒充用户,会在 root 用户下加载,这样不好)。

有任何想法吗?

0 投票
4 回答
9120 浏览

macos - 使用 GUI 会话为所有用户启动/停止启动代理

我需要能够从根级守护进程启动/停止每个会话的 GUI 代理。

在这里这里这里讨论了类似的问题。

我想要能够做的基本上是

但这只会启动/停止一个实例,并在当前 GUI 会话中以 root 身份运行。如果我离开 sudo 那里开始我得到

我尝试过处理 bsexec 的各种其他排列(包括使用 load/unload 命令从 bsexec 调用辅助脚本),但我永远无法让实例以 root 以外的任何方式启动,也永远无法在另一个 GUI 会话中启动.

我也尝试过使用su - <user> ...and sudo -u <user> ...,但也没有运气(正如许多人在上面链接的文章和其他地方所讨论的那样)。

有人有什么想法吗?

编辑:我尝试使用 Graham Lee 下面建议的包装工具执行此操作,但出现以下错误:

这是我正在使用的命令行命令、包装器和脚本(501 是用户 ID,63093 是另一个登录到系统的用户的启动 pid):

命令行:

包装:

脚本:

0 投票
2 回答
655 浏览

cocoa - launchd 守护进程是在 Cocoa 中读取/写入特权文件的最佳途径吗?

我有一个应用程序,它需要能够写入任何用户/当前主机首选项文件(这需要每个首选项实用程序参考的管理员权限),并且还需要通过其 plist 启用/禁用启动代理(只能由 root 写入)。

SFAuthorizationView过去常常要求用户在更改这些值之前以管理员身份进行身份验证。

我正在尝试确定实际更改这些值的最佳方法。

便宜的hackish选项似乎是使用AuthorizationExecuteWithPrivileges()and mvor defaults,或者通过BLAuthentication 或者我自己创建类似的东西。这样做的缺点是没有得到我正在执行的任何命令行应用程序的返回值,以及我遇到的一些奇怪的深奥错误(例如在某些情况下得到 -60008 错误)。显然,Apple 强烈建议不要这样做,但人们似乎确实这样做了,并且取得了一些成功。

第二个最骇人听闻的选项似乎是整个创建一个设置了 suid 位的助手应用程序以及--self-repair在各个地方讨论的选项。这似乎是可能的,但它可能并不比第三种选择少多少麻烦。

第三个选项是创建一个成熟的launchd守护进程,它将以 root 身份运行并通过套接字与我的应用程序通信。读取和写入一些 plist 文件似乎有点矫枉过正,但我​​也有可能在以后找到它的其他用途,而且它不会是我的应用程序的唯一守护进程,所以看起来并不合理加上另一个。

我正在考虑为我的目的修改此示例代码

我的两个问题是:

  1. launchd 守护程序选项似乎是最好的途径,还是我错过了更简单的途径?

  2. 有没有其他人成功地使用该代码作为类似东西的基础,是否有人看到我遗漏的任何明显问题?我已经在一个测试应用程序中成功使用了它,但我很想听听你们对此的看法。