我正在尝试使用Launchctl来启动svnserve进程,但我一直收到一条错误消息"没有返回plist:/Library/LaunchAgents/org.tigris.subversion.svnserve.plist".这是svnserve是/ opt/local/bin/svnserve的地方,这是plist文件任何想法这里可能有什么问题?
<dict>
<key>Disabled</key>
<false/>
<key>Label</key>
<string>org.tigris.subversion.svnserve</string>
<key>ProgramArguments</key>
<array>
<string>/opt/local/bin/svnserve</string>
<string>--inetd</string>
<string>--root=/Users/Sunit/Repositories</string>
</array>
<key>ServiceDescription</key>
<string>SVN Version Control System/string>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<array>
<dict>
<key>SockFamily</key>
<string>IPv4</string>
<key>SockServiceName</key>
<string>svn</string>
<key>SockType</key>
<string>stream</string>
</dict>
<dict>
<key>SockFamily</key>
<string>IPv6</string>
<key>SockServiceName</key>
<string>svn</string>
<key>SockType</key>
<string>stream</string>
</dict>
</array>
</dict>
Run Code Online (Sandbox Code Playgroud) 我正在使用mac osx 10.6 - 而且似乎minutes参数确定了作业运行的小时数.但是你如何建立一个工作,每小时运行x分钟.
我已经尝试将分钟设置为多个数字的数组和一个带有一个字符串的数组,即"*/5",即类似于crontab的每五分钟语法.
我一直在寻找一种在iPhone上启动守护进程的方法,我通过学习蚂蚁应用程序的源代码,用Xcode创建了一个小测试应用程序,它告诉我应该使用launchctl但不幸的是它不起作用.
我已经在我的iPod Touch上用SSH安装了我的应用程序/Applications/,然后我通过SSH通过SSH启动它,mobile我的日志说:
Script started on Thu Feb 24 19:33:28 2011
bash-3.2$ ssh mobile@192.168.1.8
mobile@192.168.1.8's password:
iPod-van-Henri:~ mobile$ cd /Applications
iPod-van-Henri:/Applications mobile$ cd DaemonUtility.app/
iPod-van-Henri:/Applications/DaemonUtility.app mobile$ ./DaemonUtility
2011-02-24 19:35:08.022 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:09.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:10.021 DaemonUtility[1369:107] Read 0 bytes
2011-02-24 19:35:11.021 DaemonUtility[1369:107] Read 0 bytes
Bug: launchctl.c:2367 (24307):13: (dbfd = open(g_job_overrides_db_path, O_RDONLY | O_EXLOCK | O_CREAT, S_IRUSR | S_IWUSR)) != -1
launchctl: CFURLWriteDataAndPropertiesToResource(/private/var/stash/Applications.pwn/DaemonUtility.app/com.developerief2.daemontest.plist) failed: …Run Code Online (Sandbox Code Playgroud) 任何熟悉launchdMac OS X的人,特别是文件部分的NetworkState(bool)键?KeepAlive.plist
在man页面launchd上,当Mac上没有网络连接时,应该调用可执行文件,当plist配置如下:
...
<key>KeepAlive</key>
<dict>
<key>NetworkState</key>
<false/>
</dict>
...
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但是,一旦建立了有效的网络连接(定义为具有至少一个非环回IPv4/6地址的Mac),就launchd 应该停止调用可执行文件(因为该NetworkState标志应该阻止它).
不过,我看到的行为是,无论 Mac的网络连接如何,都会launchd一直调用我的程序!这好像完全无视旗帜.launchdNetworkState
有没有人知道如何使这项工作launchd只在没有网络连接时调用程序,并在建立网络连接后停止调用它?
已经解决了如何为用户会话(而不仅仅是终端)中的所有程序设置PATH的问题.所以我改变了/etc/launchd.conf和/ etc/paths,只是为了确保一切正常.但是,当我启动终端时,我仍然得到一个不同的PATH envar而不是我期望的(我不确定如何从另一个应用程序测试PATH.)
这是/etc/launchd.conf中的内容:
setenv PATH /sw/bin:/sw/sbin:/sw/local/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11/bin:/opt/local/bin:/opt/local/sbin
Run Code Online (Sandbox Code Playgroud)
这是/ etc/paths中的内容:
.
$HOME/bin
/sw/bin
/sw/sbin
/sw/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
Run Code Online (Sandbox Code Playgroud)
加上/etc/paths.d/中的几个文件:
X11:
/usr/X11/bin
Run Code Online (Sandbox Code Playgroud)
选择:
/opt/local/bin
/opt/local/sbin
Run Code Online (Sandbox Code Playgroud)
现在,当我推出一个新终端时,我得到的是:
miishka:~ tamara$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:.:/Users/tamara/bin:/sw/bin:/sw/sbin:/sw/local/bin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/opt/local/sbin
miishka:~ tamara$
Run Code Online (Sandbox Code Playgroud)
我检查了我的.bashrc和.bash_profile,我没有.profile,我已经检查了/ etc/profile和/ etc/bashrc,并且它们中的NONE都触及了PATH envar.
我很难过.
我正在尝试在Mac OS上为jenkins创建单独的用户并使用此用户运行它.我创建了一个新用户:
# Create the group
sudo dscl . create /Groups/jenkins
sudo dscl . create /Groups/jenkins PrimaryGroupID 300
# Create the user
sudo dscl . create /Users/jenkins
sudo dscl . create /Users/jenkins PrimaryGroupID 300
sudo dscl . create /Users/jenkins UniqueID 300
sudo dscl . create /Users/jenkins UserShell /bin/bash
# Set the users pasword
sudo dscl . passwd /Users/jenkins 123qweASD
# Add the user to the group
sudo dscl . append /Groups/jenkins GroupMembership jenkins
Run Code Online (Sandbox Code Playgroud)
而我试图像jenkins用户一样运行jenkins:
sudo su - jenkins -c run_jenkins.sh …Run Code Online (Sandbox Code Playgroud) 我有在launchd下安装的Redis作业.
为了检查我的应用程序如何在没有Redis的情况下工作,我想暂停一下.
$launchctl stop homebrew.redis # => redis down and up right away
Run Code Online (Sandbox Code Playgroud)
我知道命令,launchctl unload path_to_plist但这对我来说不是解决方案.
没有卸载plist的解决方案是否存在?
我已经尝试了很多不同的变化,但却无法让它发挥作用.
我有一个plist文件:
<?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.ilium007.handbrake</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Users/ilium007/support/scripts/handbrake/handbrake.sh >> /Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log</string>
<!--<string>>></string>-->
<!--<string>/Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log</string>-->
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
请注意那里的评论.
我想将handbrake.sh脚本的输出管道传输到日志文件,并尝试这样做,但在OSX上的system.log中不断出现"无此文件"错误.
Nov 3 18:03:54 macmini com.ilium007.handbrake[15348]: /bin/bash: /Users/ilium007/support/scripts/handbrake/handbrake.sh >> /Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log: No such file or directory Nov 3 18:03:54 macmini com.apple.launchd.peruser.501[162] (com.ilium007.handbrake[15348]): Exited with code: 127
Run Code Online (Sandbox Code Playgroud)
如果我将plist更改为以下,它会运行,但我没有记录,所以我假设它只运行第一个参数:
<?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.ilium007.handbrake</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Users/ilium007/support/scripts/handbrake/handbrake.sh</string>
<string>>></string>
<string>/Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log</string> …Run Code Online (Sandbox Code Playgroud) 我想launchctl从应用程序执行.
为此,我使用以下代码,
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/launchctl"];
NSArray *arguments;
arguments = [NSArray arrayWithObjects: @"load ", @"/Users/XYZ/com.XYZ.plist", nil];
[task setArguments: arguments];
[task launch];
Run Code Online (Sandbox Code Playgroud)
它给了我错误, launchctl: unknown subcommand "load "
但是,当我从终端运行命令时,它正确执行
>launchctl load /Users/XYZ/com.XYZ.plist
Run Code Online (Sandbox Code Playgroud)
这有什么区别,它如何运作NSTask?
我用自制软件安装了NGINX然后我得到了信息并按照说明加载了launchd plist
$ brew info nginx
nginx: stable 1.6.2, devel 1.7.7, HEAD
...
To load nginx:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
Or, if you don't want/need launchctl, you can just run:
nginx
Run Code Online (Sandbox Code Playgroud)
问题是我重启时nginx没有加载.
plist看起来像这样:
<?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>homebrew.mxcl.nginx</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/nginx/bin/nginx</string>
<string>-g</string>
<string>daemon off;</string>
</array>
<key>WorkingDirectory</key>
<string>/usr/local</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)