问题标签 [launch-agent]

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 投票
1 回答
29 浏览

macos - 在 OS 负载上启动 Mac 应用程序将不起作用

我正在尝试创建一个 plist 文件,以放入用户 Mac 的 LaunchAgents 中。我将使用这个 plist 来确保它在每次 Mac 开机或用户登录时打开一个特定的应用程序。据我所知,我很确定 plist 应该像现在这样工作,但事实并非如此。每当我重新启动我的 Mac 或注销并再次登录时,什么都没有发生。

为了更容易与其他 Mac 进行比较,我正在尝试打开常规的计算器应用程序,该应用程序位于所有 Mac 上。

要列出我目前所做的事情,请在下面制作 plist 并将其命名,open.plist同时我将它放在 LaunchAgents 文件夹中,该文件夹位于我的 Mac 的库文件夹中。

这是我目前的清单。

基本上,这个想法是在 LaunhAgents 中有这个 plist,然后让它在 Application 或 Documents 文件夹中加载一个应用程序。

0 投票
0 回答
515 浏览

python - 使用启动代理运行时无法在 python 脚本中导入模块

我写了一个 python 脚本,如果我正常运行它就可以工作(python path/to/file.py)。我需要它每隔几个小时自动运行一次。因此,我在 /Users/User/Library/LaunchAgents 中创建了一个 plist 文件,该文件触发了一个 .sh 文件,该文件最终触发了 python 脚本。

python 脚本无法在没有错误的情况下运行。我设法将问题缩小到模块“PyPDF2”和“reportlab”(如果我排除这些模块,脚本运行良好)。我收到的错误消息显示“没有名为 reportlab.pdfgen 的模块”和“没有名为 PyPDF2 的模块”。

代码的相关部分是:

.sh 脚本:

Python脚本:

同样,如果我自己运行脚本,它就可以工作。我的猜测是,launchctl 以 root 身份运行,而 root 不知何故无法找到/访问模块。我已经进行了广泛的搜索,但找不到任何东西。

我对此比较陌生,可能会遗漏一些明显的东西?

我在 Mac 上运行 2.7 版的 python 脚本。

这里似乎有什么问题?

感谢您的帮助

更新:如果我将 print(sys.path) 放入代码中并自己运行它以及使用触发器,我两次都会得到一长串路径。其中一些是相同的,但大多数是不同的。我也跑了

我自己和使用触发器。虽然如果我自己运行模块会显示,但如果我使用触发器则不会。

给我“/usr/local/lib/python2.7/site-packages/reportlab/init .pyc ”和“/usr/local/lib/python2.7/site-packages/PyPDF2/init .pyc ”。我尝试运行 sys.path.append("/usr/local/lib/python2.7/site-packages/PyPDF2/ init .pyc") sys.path.append("/usr/local/lib/python2.7/ site-packages/reportlab/ init .pyc") 在我被触发时在脚本中,但它似乎没有帮助。

0 投票
1 回答
240 浏览

macos - 应用程序在系统重新启动时不启动

我创建了一个运行应用程序的 LaunchDaemon 服务

这是我的com.testapp.plist

它工作正常。但是当我重新启动系统时,launchdaemon 会启动我的应用程序,但它会终止应用程序。

我在控制台中得到的日志是,

我还从 Activity Monitor 检查了应用程序的运行状态,显示应用程序正在运行。

还通过以下方式检查了守护进程状态

这也表明守护进程也在运行。

此外,下面是来自守护进程 plist 的标准输出日志(它记录了我在应用程序中所做的日志):

我无法得到这个问题的主要原因。

请帮忙。

提前致谢。

0 投票
0 回答
1048 浏览

macos - 启动代理未启动

我正在尝试制作一个启动Python 脚本的启动代理。它应该在有网络连接时运行,但它不这样做。launchctl list说它已加载:

当我开始它时,launchctl start test.Flopsey.DiscordMusicBot它工作正常。.plist 文件(存储在 ~/Library/LaunchAgents 下)如下所示:

我是 launchd 的新手,我按照本教程进行操作。我认为我的问题的解决方案是非常基本的,但我不知道它可能是什么。我还制作了另一个类似的代理,它工作正常(与音乐机器人不同,它只有一个文件)。

更新

感谢@LCC的评论,我意识到 usingNetworkState在 OS X 10.10 及更高版本上不再起作用。由于脚本在无法连接到 Internet 时退出,因此我可以设置KeepAlive<true/>设置一个ThrottleIntervalsolaunchd,如果无法连接,则在冷却后重新启动脚本。

0 投票
1 回答
221 浏览

macos - 如何使用launchd .plist 文件来守护一个grunt watch 命令?

我试图grunt watch在我的用户登录我的 OS X 机器时运行,这样我就不必grunt watch每次都手动在我的 $APP_ROOT 目录中运行。

我有以下org.grunt.watch.plist文件/Library/LaunchAgents

/usr/local/bin/grunt-watch-launchd是我创建的一个 shell 脚本:

该脚本应使用daemon实用程序(与 一起安装brew install daemon)并“守护”该grunt watch命令,该命令依次加载Gruntfile.js配置并启动监视任务。

/usr/local/bin/grunt-watch-launchd当我使用我的用户从 CLI手动运行时,一切正常。我看到一个daemonwith ps aux | grep gruntwhich 运行grunt watch命令。APP_ROOT如果我随后watchGruntfile.js.

但关键是我希望当我用我的用户登录时launchd自动启动。/usr/local/bin/grunt-watch-launchd问题是当我运行时launchctl

launchctl load /Library/LaunchAgents/org.grunt.watch.plist

服务未加载。或者至少,launchd调用脚本(因为我看到文件/tmp/grunt-watch-launchd.log是创建的,所以脚本运行,虽然/tmp/grunt-watch-launchd.log是空的),但守护进程似乎没有被创建或以某种方式被launchd.

此外,里面什么也没有出现/var/log/system.log。如果我尝试launchctl使用 sudo 运行:

sudo launchctl unload /Library/LaunchAgents/org.grunt.watch.plist && sudo launchctl load /Library/LaunchAgents/org.grunt.watch.plist

/tmp/grunt-watch-launchd.log将包含以下行:

使用 sudo,/var/log/system.log告诉我:

无论哪种方式(launchctl使用和不使用 sudo),我都可以确认该服务未启动:

当我的用户登录时,有什么问题以及将这个脚本作为守护进程运行的正确方法是什么?

感谢您的关注。

编辑:我忘了说我使用的是 Mac OS X 10.12 Sierra,安装了 Gruntnpm并且我使用的是 MacBook Pro(13 英寸,2012 年中)(如果有帮助的话)。

编辑2:我发现了问题。作为launchd代理运行时,脚本无法找到命令,因为代理的用户不是我的用户。因此发生了 127 错误。

所以这适用于所有像我这样坚持使用非常简单的launchd代理的人:

  • 始终检查您使用的命令是否在启动该命令的用户的 PATH 中。使用绝对路径,如有必要,在脚本的第一行设置 PATH 变量。

  • 将所有命令输出重定向到一个文件,以便您可以查看启动脚本时是否发生错误(在我的情况下,由于某种原因launchd错误没有出现)。/var/log/system.log

0 投票
1 回答
177 浏览

mongodb - 需要使用 launchctl 启动 mongod

我已经MongoDB使用手动选项安装了。

当我触发 mongod 时,它会从其他地方专门为dbPath.

我想拥有自己的dbPath而不是每次都用 --dbPath 指定它。

所以我找到了提供mongod.conf文件和调用mongod --config选项的选项,但我仍然需要传递.conf文件的路径。

我的最终目标是将 mongod 作为服务启动,它将从我配置的路径中读取配置文件。为此,我尝试LaunchAgentLaunchDaemon但没有运气。我的想法是,如果我可以配置LaunchAgent或守护进程,那么我将提供 MongoDB 文件夹的 bin 目录的 mongod 路径,并提供文件--config路径.conf作为参数,然后我只需要使用launchctl名称 mongod 启动 mongod,它就会启动mongod --config <.conf file path>

但我不能这样做。我阅读了近 15-16 篇关于 LaunchAgent 和 Daemon 的帖子,但没有解决我的问题。我试图通过在不同的地方制作 mongod.plist 文件来做到这一点/Library/LaunchDaemon/Library/LaunchAgent~/Library/LaunchDaemon我总是得到错误“ Path had bad ownership/permissions”。我试过了chownchgrp但没有运气。

我希望你明白我的意思。我真的需要完整的解决方案来实现我的目标。

0 投票
1 回答
979 浏览

objective-c - 如何在 /Library/LaunchAgents 下创建 .plist 文件

我正在尝试通过 Apple Doc 为 macOS 开发启动代理

https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html

我的要求之一是代理应该适用于所有用户。我从上面的文档中了解到我必须将我的 .plist 放在“/Library/LaunchAgents”文件夹下。

当我尝试以编程方式创建此文件时,以下代码没有任何反应。

可能原因是特权问题。你有解决这个问题的想法吗?

0 投票
1 回答
85 浏览

macos - 启动不识别手动启动的应用程序

我正在尝试使用我的托盘应用程序完成以下操作:

  1. MyApp.app 应该在崩溃时重新启动
  2. MyApp.app 不应在用户登录时启动(即用户必须手动启动应用程序)

我有一个问题,如果用户手动启动应用程序,那么列表中 launchctl list com.myapp不会显示正在运行的应用程序。

但是,如果我让 LaunchAgent 在用户登录时启动应用程序,然后launchctl list com.myapp正确显示该应用程序,并将在崩溃(或任何非零退出代码)时重新启动它。

奇怪的是,如果用户手动启动应用程序,launchd 会在几分钟后尝试启动它自己的实例。我什至无法解释为什么会发生这种情况。

我的 LaunchAgent plist 示例:

0 投票
0 回答
33 浏览

launchd - 启动登录脚本不起作用

我写了以下plist:

我将此 plist 文件添加到 /Library/LaunchAgents 中(因此适用于所有用户)。

脚本(存储在 /Users/Shared/ 中)

我尝试launchctl load com.foo.foo1.plist 但没有。我重新启动我的mac,但没有。文件 filetodelete.docx 在 mac 上。

该脚本拥有所有权利 777 com.foo.foo1.plist 文件具有 -rw-r--r-- (与所有用户 plist 文件一样)

可能是什么原因?

0 投票
1 回答
904 浏览

macos - 无法在 Mac OS El Capiton 上设置 DYLD_INSERT_LIBRARIES 环境变量

我正在开发一个需要包装 libc 调用的项目,特别是文件 i/o 调用,如打开、读取、写入、关闭等。我创建了一个共享库(比如 wrapper.so)并预加载了这个 wrapper.so。通过设置 LD_PRELOAD 变量,我可以在 Linux 上成功使用这个包装器。在 MAC 上,我尝试将 DYLD_FORCE_FLAT_NAMESPACE 设置为 1,将 DYLD_INSERT_LIBRARIES 设置为 /path/wrapper.so,使用 1) .bash_profile、2)launchctl setenv、3)LaunchAgent、4)LaunchDeamon 方法,但没有任何效果。

我什至尝试通过 Info.plist 在应用程序级别为特定应用程序设置 DYLD_FORCE_FLAT_NAMESPACE、DYLD_INSERT_LIBRARIES 环境变量,但这也不起作用。

注意:我可以使用上述所有方法设置一些随机的新变量,例如 MYVAR。所以,我在设置 DYLD_* 变量时遇到了问题。你能帮我在 MAC 上设置 DYLD_FORCE_FLAT_NAMESPACE、DYLD_INSERT_LIBRARIES 变量吗?