我有一个startd运行的脚本启动服务器,然后告诉它在launchd将其关闭时(优先应该在关闭时)正常退出.我的问题:在获得信号之前,告诉脚本空闲的适当的惯用方法是什么?我应该只使用while-true-sleep-1循环,还是有更好的方法来做到这一点?
#!/bin/bash
cd "`dirname "$0"`"
trap "./serverctl stop" TERM
./serverctl start
# wait to receive TERM signal.
Run Code Online (Sandbox Code Playgroud) 我的问题是如何在重启后使用具有root权限的launchd start创建MacOSX守护进程?
我正在编写一个内部使用的应用程序来阻止访问网站.它是用python编写的,并修改/ ect/hosts文件以禁用或启用列出的URL.主要应用程序是在django中,我创建了一个python twisted守护程序,它执行/ etc/hosts文件的实际修改,因为root访问权限是必需的.
我创建了一个plist文件,它可以处理一个小问题.重新启动后,守护进程具有正常的登录权限,而不是root权限.
解决方法是使用我的正常权限停止进程,然后使用sudo启动进程.
launchctl unload /Library/LaunchAgents/com.balanceinfosystems.socialshields.twisted.plist
sudo launchctl load /Library/LaunchAgents/com.balanceinfosystems.socialshields.twisted.plist
Run Code Online (Sandbox Code Playgroud)
plist文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.balanceinfosystems.socialshields.twisted</string>
<key>Program</key>
<string>/source/social_shields/social_shields_twisted.py</string>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud) 我正在iPhone上运行该应用程序的发布版本,它运行正常.XCode调试器中没有错误消息:
Running… Switching to thread 11779 Switching to thread 11779 sharedlibrary apply-load-rules all (gdb) continue Switching to thread 12291 Switching to thread 11779 Switching to thread 13059 Debugger stopped. Program exited with status value:0.
但是,当通过管理器连接到iPhone时,我在iPhone的控制台中看到这些消息:
WWed Oct 7 15:37:01 unknown com.apple.launchd[1] : (UIKitApplication:com.blah.blah[0x830c]) Bug: launchd_core_logic.c:2649 (23909):10 Wed Oct 7 15:37:01 unknown com.apple.launchd[1] : (UIKitApplication:com.blah.blah[0x830c]) Working around 5020256. Assuming the job crashed. Wed Oct 7 15:37:01 unknown com.apple.launchd[1] : (UIKitApplication:com.blah.blah[0x830c]) Job appears to have crashed: Segmentation fault Wed Oct 7 15:37:01 …
我正在尝试为我的节点服务器编写一个launchd.plist文件.我正在使用永远运行我的节点服务器.我希望服务器在启动时启动.我还想等待mongodb launchd plist先行.
我使用自制软件安装了mongobb,它已经附带了launchd.plist.我执行了以下操作:
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
Run Code Online (Sandbox Code Playgroud)
mongodb的plist是:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>homebrew.mxcl.mongodb</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/mongodb/mongod</string>
<string>run</string>
<string>--config</string>
<string>/usr/local/etc/mongod.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>WorkingDirectory</key>
<string>/usr/local</string>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/mongodb/output.log</string>
<key>StandardOutPath</key>
<string>/usr/local/var/log/mongodb/output.log</string>
<key>HardResourceLimits</key>
<dict>
<key>NumberOfFiles</key>
<integer>1024</integer>
</dict>
<key>SoftResourceLimits</key>
<dict>
<key>NumberOfFiles</key>
<integer>1024</integer>
</dict>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
如果我关闭计算机并重新启动mongodb应该启动它.
但是我的节点服务器没有启动.有任何想法吗?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>Label</key>
<string>com.test.app</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/forever</string>
<string>-a</string>
<string>-l</string>
<string>/var/log/app/app.log</string>
<string>-e</string>
<string>/var/log/app/app_error.log</string> …Run Code Online (Sandbox Code Playgroud) 我正在开发一个大多数用户选择"在登录时启动"的OS X应用程序,这是您在菜单栏中找到的那种.
为了在登录时启动它,我正在使用SMLoginItemSetEnabled启动LoginHelper应用程序来打开主应用程序,如本教程所述.
该应用程序无法启动登录时只为少数用户.
我无法重现这个或跟踪原因,但我发现(在用户的机器上):
在应用程序登录时删除/Root/_com.apple.SMLoginItemBookmarks/[myapp]并/Root/[myapp]打开/var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist然后重置启动修复了该问题.此外,我们对文件进行了差异化Data,书签上的内容也发生了变化.
作为参考,我在这里找到了关于overrides.plist的信息.
由于该应用程序同时具有Mac App Store和直接下载版本,因此我怀疑应用程序的多个副本设置为自动登录时启动可能是导致失败的原因,也许这些"书签"正在尝试打开另一个实例应用程序,可能会或可能不会被删除.
现在问题,只要这个应用程序需要保持沙盒:
注意:这是我在StackOverflow上的第一个问题,如果我没有遵循一些建议的礼节,请原谅.
有人知道那个错误代码是什么意思吗?我通过此返回码值获得SMJobBless错误.
Failed to bless helper: Error Domain=CFErrorDomainLaunchd Code=9 "The operation couldn’t be completed. (CFErrorDomainLaunchd error 9.)"
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索,在博客文章中查找答案,在Apple Docs中,在那里找不到答案是什么以及如何解决它.人们说(在一些支持论坛上,重新安装OS X对他们有帮助).
几周以前,我已经在我正在进行的项目中发生了这件事,唯一能帮助我解决问题的是改变我帮助工具的名称.现在又发生了.
同时我的代码在其他计算机上工作,只有我的工作站受此问题的影响.
更新: 重命名后,它再次起作用.现在我的系统上有两个帮助工具包标识符"禁止":-(
更新2: 它也发生在其他计算机上:-(
我在/ Library/LaunchDaemon /中创建了一个plist文件
运行它的计算机无法重新启动(服务器事物),它正在运行MacOS Tiger.我希望以下命令可以完成这项工作,但它声明它并不意味着直接运行:
launchd /Library/LaunchDaemon/parallel.plist
Run Code Online (Sandbox Code Playgroud)
怎么能实现这一目标?谢谢!
我有一个launchd per-user代理.在它的.plist中,我想使用$HOME环境变量.
可能吗?
(它是"程序"键,我想将其定义为"$ HOME/bin/myscript")
我有一个作为launchd代理运行的程序,我有stdout和stderr使用StandardErrorPath和StandardOutputPath键发送到日志文件.我非常热衷于将stdout/stderr记录在某个地方,而且看起来像启动它设置这将是明智的事情.
(我的目的是建议一个文件~/Library/Logs/作为一个好的设置.然后你可以很容易地看到Console.app中的输出.)
我注意到的一点是,launchd似乎永远不会清理这些日志!我希望它可以在每次重启时清除日志,或者每隔几天,或者其他什么东西 - 但似乎没有.几周后,我有一个7MByte的22,000行日志文件,几乎没有一个是相关的.(你不太关心在上次重启之前发生的任何事情,事实上你不太可能关心过去15分钟内没有发生的事情.)
我能做些什么来阻止文件无限增长吗?
我有一个简单的 python 脚本,它从我的下载文件夹中移动文件。当我通过终端运行该脚本时,该脚本运行良好。当它通过 launchd 运行时会出现问题:
Traceback (most recent call last):
File "/Users/ben/Project/Automation/CleanDownload.py", line 11, in <module>
for f in listdir(downloadFolder):
OSError: [Errno 1] Operation not permitted: '/Users/ben/Downloads/'
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?