问题标签 [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.
macos - 在 OS 负载上启动 Mac 应用程序将不起作用
我正在尝试创建一个 plist 文件,以放入用户 Mac 的 LaunchAgents 中。我将使用这个 plist 来确保它在每次 Mac 开机或用户登录时打开一个特定的应用程序。据我所知,我很确定 plist 应该像现在这样工作,但事实并非如此。每当我重新启动我的 Mac 或注销并再次登录时,什么都没有发生。
为了更容易与其他 Mac 进行比较,我正在尝试打开常规的计算器应用程序,该应用程序位于所有 Mac 上。
要列出我目前所做的事情,请在下面制作 plist 并将其命名,open.plist
同时我将它放在 LaunchAgents 文件夹中,该文件夹位于我的 Mac 的库文件夹中。
这是我目前的清单。
基本上,这个想法是在 LaunhAgents 中有这个 plist,然后让它在 Application 或 Documents 文件夹中加载一个应用程序。
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") 在我被触发时在脚本中,但它似乎没有帮助。
macos - 应用程序在系统重新启动时不启动
我创建了一个运行应用程序的 LaunchDaemon 服务
这是我的com.testapp.plist:
它工作正常。但是当我重新启动系统时,launchdaemon 会启动我的应用程序,但它会终止应用程序。
我在控制台中得到的日志是,
我还从 Activity Monitor 检查了应用程序的运行状态,显示应用程序正在运行。
还通过以下方式检查了守护进程状态
这也表明守护进程也在运行。
此外,下面是来自守护进程 plist 的标准输出日志(它记录了我在应用程序中所做的日志):
我无法得到这个问题的主要原因。
请帮忙。
提前致谢。
macos - 启动代理未启动
我正在尝试制作一个启动Python 脚本的启动代理。它应该在有网络连接时运行,但它不这样做。launchctl list
说它已加载:
当我开始它时,launchctl start test.Flopsey.DiscordMusicBot
它工作正常。.plist 文件(存储在 ~/Library/LaunchAgents 下)如下所示:
我是 launchd 的新手,我按照本教程进行操作。我认为我的问题的解决方案是非常基本的,但我不知道它可能是什么。我还制作了另一个类似的代理,它工作正常(与音乐机器人不同,它只有一个文件)。
更新
感谢@LCC的评论,我意识到 usingNetworkState
在 OS X 10.10 及更高版本上不再起作用。由于脚本在无法连接到 Internet 时退出,因此我可以设置KeepAlive
并<true/>
设置一个ThrottleInterval
solaunchd,如果无法连接,则在冷却后重新启动脚本。
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手动运行时,一切正常。我看到一个daemon
with ps aux | grep grunt
which 运行grunt watch
命令。APP_ROOT
如果我随后watch
在Gruntfile.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
mongodb - 需要使用 launchctl 启动 mongod
我已经MongoDB
使用手动选项安装了。
当我触发 mongod 时,它会从其他地方专门为dbPath
.
我想拥有自己的dbPath
而不是每次都用 --dbPath 指定它。
所以我找到了提供mongod.conf
文件和调用mongod --config
选项的选项,但我仍然需要传递.conf
文件的路径。
我的最终目标是将 mongod 作为服务启动,它将从我配置的路径中读取配置文件。为此,我尝试LaunchAgent
了LaunchDaemon
但没有运气。我的想法是,如果我可以配置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
”。我试过了chown
,chgrp
但没有运气。
我希望你明白我的意思。我真的需要完整的解决方案来实现我的目标。
objective-c - 如何在 /Library/LaunchAgents 下创建 .plist 文件
我正在尝试通过 Apple Doc 为 macOS 开发启动代理
我的要求之一是代理应该适用于所有用户。我从上面的文档中了解到我必须将我的 .plist 放在“/Library/LaunchAgents”文件夹下。
当我尝试以编程方式创建此文件时,以下代码没有任何反应。
可能原因是特权问题。你有解决这个问题的想法吗?
macos - 启动不识别手动启动的应用程序
我正在尝试使用我的托盘应用程序完成以下操作:
- MyApp.app 应该在崩溃时重新启动
- MyApp.app 不应在用户登录时启动(即用户必须手动启动应用程序)
我有一个问题,如果用户手动启动应用程序,那么列表中
launchctl list com.myapp
不会显示正在运行的应用程序。
但是,如果我让 LaunchAgent 在用户登录时启动应用程序,然后launchctl list com.myapp
正确显示该应用程序,并将在崩溃(或任何非零退出代码)时重新启动它。
奇怪的是,如果用户手动启动应用程序,launchd 会在几分钟后尝试启动它自己的实例。我什至无法解释为什么会发生这种情况。
我的 LaunchAgent plist 示例:
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 文件一样)
可能是什么原因?
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 变量吗?