是否可以知道加载到launchctl命令中的.plist文件位置?
标签名称列在"launchctl list"中,其内容可以通过"launchctl list LABEL"查看,但我找不到.plist文件位置.
我知道它将位于/ Library/LaunchAgent或〜/ Library/LaunchAgent之类的东西,但我不希望在使用launchctl命令列出所有作业时搜索路径.
我正在使用launchd来运行一些自动化任务,我想知道'Day'和'Weekday'之间有什么区别.
根据http://discussions.apple.com/thread.jspa?threadID=1361809,有一个"微妙"的差异,可能导致launchd行为不端.
最后,我想在每个工作日(周一至周五)早上8点运行一个plist,但我不知道如何获得相当于
0 8 * * 1-5
Run Code Online (Sandbox Code Playgroud) 我们的Jenkins CI构建服务器是在运行OSX Lion(10.7.3)的Mac Mini上设置的,我无法让它签署iOS版本,因此可以将它们上传到TestFlight.
该进程以名为jenkins的普通用户身份运行,并在启动时使用launchd启动.(外部世界无法访问该计算机,因此在普通用户帐户下运行此计算机不会出现任何安全问题.)
以下是jenkins控制台输出中的错误:
[workspace] $ /usr/bin/xcodebuild -target iMobileStCloud -configuration Release clean build
=== CLEAN NATIVE TARGET MyApp OF PROJECT MyProject WITH CONFIGURATION Release ===
Check dependencies
[BEROR]Code Sign error: The identity 'iPhone Distribution' doesn't match any valid certificate/private key pair in the default keychain
Run Code Online (Sandbox Code Playgroud)
部分问题似乎是在启动时从launchd启动进程时只有System Keychain可用.我在构建过程中添加了一个脚本来列出密钥链:
[workspace] $ /bin/sh -xe /var/folders/1y/1q3st_ss58z9ffj4dwbkdw8r0000gt/T/hudson8514187812830984272.sh
+ /usr/bin/security list-keychains
"/Library/Keychains/System.keychain"
"/Library/Keychains/applepushserviced.keychain"
"/Library/Keychains/System.keychain"
+ /usr/bin/security find-identity
Run Code Online (Sandbox Code Playgroud)
我找到了两个解决方法,但是没有一个是可行的:
如果我们每次重启机器时登录服务器并重新启动launchd进程,那么jenkins就可以加载登录密钥链并访问证书进行签名:
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
Run Code Online (Sandbox Code Playgroud)我们可以将证书添加到系统密钥链中,但这意味着我们无法使用此计算机来执行我们的应用商店分发版本.(Xcode不喜欢系统钥匙串).
有没有其他人找到任何其他可行的解决方法?除了launchd之外还有什么东西可以用来在OSX上启动时运行进程吗?
我发现在mac os x 10.10上的legacy子命令中列出了launchctl子命令,如load/unload.
所以我的问题是如何启动加载/卸载/ Library/LaunchDaemons /中出现的恶魔
我访问了链接.
用这个我做的 sudo launchctl bootstrap system /Library/LaunchDaemons/com.mydemo.com
并且只有在plist的权限合适时才发现服务加载成功.
但是无法在非遗留命令的帮助下卸载它.
我在尝试使用命令时发现 sudo launchctl unbootstrap system /Library/LaunchDaemons/com.mydemo.com它显示消息"命令尚未实现".
注意:加载/卸载仍然有效.
在OS X Yosemite(10.10)上,有没有办法删除服务的启用/禁用覆盖设置?
例如,要永久禁用root用户不存在的服务"test",请执行以下操作:
sudo launchctl disable user/0/test
Run Code Online (Sandbox Code Playgroud)
检查它是否已添加到禁用列表中:
sudo launchctl print-disabled user/0
Run Code Online (Sandbox Code Playgroud)
结果:
disabled services = {
"test" => true
}
login item associations = {
}
Run Code Online (Sandbox Code Playgroud)
现在,如何从禁用的服务列表中删除"test"?
(我知道我可以启用它,但我只想完全删除该条目.)
注意:
如果我重新启动计算机,我会看到"test"覆盖已添加到launchd disabled文件中:
sudo cat /var/db/com.apple.xpc.launchd/disabled.0.plist
Run Code Online (Sandbox Code Playgroud)
结果:
<?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>test</key>
<true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
我试过运行此命令手动将其从.plist文件中删除:
sudo /usr/libexec/Plistbuddy /var/db/com.apple.xpc.launchd/disabled.0.plist -c Delete:test
Run Code Online (Sandbox Code Playgroud)
这会将其从文件中删除,但是当我重新启动计算机时它会再次出现.有任何想法吗?
我需要能够从根级别守护程序启动/停止每会话GUI代理.
我希望能够做的基本上是
for num in `ps ax | grep [s]bin/launchd | cut -c 1-5`;
do
if [ $num -ne 1 ];
then
sudo launchctl bsexec $num launchctl (un)load -S Aqua /Library/LaunchAgents/com.mycompany.mydaemon.plist;
fi;
done
Run Code Online (Sandbox Code Playgroud)
但这仅启动/停止一个实例,并在当前GUI会话中以root身份运行.如果我离开sudo,我就会开始
task_for_pid() (os/kern) failure
Couldn't switch to new bootstrap port: (ipc/send) invalid port right
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用bsexec的各种其他排列(包括使用load/unload命令从bsexec调用辅助脚本),但是我永远不能让实例以root身份启动,而不能在另一个GUI会话中启动.
我也试图与乱搞su - <user> ...和sudo -u <user> ...,但没有运气有两种(如很多人在上面链接的文章和其他地方的讨论).
有人有什么想法吗?
编辑:我尝试使用Graham Lee下面建议的包装工具执行此操作,但是我收到以下错误:
launch_msg(): Socket is not connected
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的命令行命令,包装器和脚本(501是用户ID,63093是另一个登录到系统的用户的launchd的pid):
命令行:
sudo launchctl bsexec 63093 /path/TestSetUIDAndExecuteTool …Run Code Online (Sandbox Code Playgroud) 我是Mac OS X世界的新手,但我有Windows开发技能.
我需要开发一个从Web服务上传/下载文件的守护进程(在Windows上将是Windows服务).
我的问题是:是否有可能创建一个用Objective-C编写的应用程序,它将成为守护进程(上传/下载)并在操作系统开始使用launchd时启动它?或者还有另一种创建守护进程的方法?
谢谢
我是最近刚买了一台mac的Linux用户.我正在尝试设置我的IDE并发现Mac不会将.bashrc/.bash_profile /等用于GUI应用程序.所以,如果你有一个需要环境变量的GUI应用程序,你显然应该在/etc/launchd.conf中这样做
问题是,这个文件使用csh样式的setenv语法("setenv键值"而不是"export key ='value'")所以现在我有一个有空格的变量,我不知道该怎么做.什么都行不通.这是我试图测试它:
setenv MAVEN_OPTS "-Xms512m -Xmx1024m" setenv MAVEN_OPTS1 '-Xms512m -Xmx1024m' setenv MAVEN_OPTS2 (-Xms512m -Xmx1024m) setenv MAVEN_OPTS3=(-Xms512m -Xmx1024m) setenv MAVEN_OPTS4 -Xms512m -Xmx1024m setenv MAVEN_OPTS5 -Xms512m setenv MAVEN_OPTS6 "$MAVEN_OPTS5 -Xmx1024" setenv MAVEN_OPTS7 $MAVEN_OPTS5 -Xmx1024 setenv MAVEN_OPTS8 /just/checking setenv MAVEN_OPTS9="-Xms512m -Xmx1024m" setenv MAVEN_OPTS10='-Xms512m -Xmx1024m' setenv MAVEN_OPTS11='-Xms512m\ -Xmx1024m' setenv MAVEN_OPTS12 '-Xms512m\ -Xmx1024m' setenv MAVEN_OPTS13 "-Xms512m\ -Xmx1024m" setenv MAVEN_OPTS14 -Xms512m\ -Xmx1024m
重启后只有var#5和#8存活.(没有空格的那些.)其余的都没有在我的环境中.
您是否知道如何使用非Mac OS X上的root用户帐户删除对端口<1024的绑定限制?
我想在不使用root的情况下在mac os x上启动.sh类型或.py文件,我在google搜索并发现launchctl可以帮助我,
所以我读教程并在教程中做同样但它不适合我,[我使用mac os x 10.9 x64]
我的.plist文件[每隔60秒运行1.sh文件]:
<?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>Label</key>
<string>com.alvin.crontabtest</string>
<key>ProgramArguments</key>
<array>
<string>/Users/paul/Desktop/1.sh</string>
</array>
<key>Nice</key>
<integer>1</integer>
<key>StartInterval</key>
<integer>60</integer>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/AlTest1.err</string>
<key>StandardOutPath</key>
<string>/tmp/AlTest1.out</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
1.sh的来源:
echo '+' >> /Users/paul/Desktop/worked.txt
Run Code Online (Sandbox Code Playgroud)
我将Run.plist放在/Users/paul/Run.plist中
并从终端运行命令:
launchctl load /Users/paul/Run.plist
Launchctl start com.alvin.crontabtest
Run Code Online (Sandbox Code Playgroud)
命令执行没有任何错误,但我没有看到working.txt中的任何内容
有人可以帮我吗?
launchd ×10
macos ×8
cron ×2
agent ×1
bash ×1
daemon ×1
ios ×1
jenkins ×1
launchctl ×1
launchdagent ×1
objective-c ×1
osx-yosemite ×1
plist ×1
privileges ×1
sockets ×1
startup ×1