标签: launchd

如何知道特定的launchd.plist文件位置?

是否可以知道加载到launchctl命令中的.plist文件位置?

标签名称列在"launchctl list"中,其内容可以通过"launchctl list LABEL"查看,但我找不到.plist文件位置.

我知道它将位于/ Library/LaunchAgent或〜/ Library/LaunchAgent之类的东西,但我不希望在使用launchctl命令列出所有作业时搜索路径.

macos launchd

18
推荐指数
5
解决办法
1万
查看次数

在启动的StartCalendarInterval中,"Day"和"Weekday"之间有什么区别?

我正在使用launchd来运行一些自动化任务,我想知道'Day'和'Weekday'之间有什么区别.

根据http://discussions.apple.com/thread.jspa?threadID=1361809,有一个"微妙"的差异,可能导致launchd行为不端.

最后,我想在每个工作日(周一至周五)早上8点运行一个plist,但我不知道如何获得相当于

0 8 * * 1-5
Run Code Online (Sandbox Code Playgroud)

macos cron launchd plist

17
推荐指数
1
解决办法
8199
查看次数

无法使用Jenkins签署iOS版本

我们的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)

我找到了两个解决方法,但是没有一个是可行的:

  1. 如果我们每次重启机器时登录服务器并重新启动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)
  2. 我们可以将证书添加到系统密钥链中,但这意味着我们无法使用此计算机来执行我们的应用商店分发版本.(Xcode不喜欢系统钥匙串).

有没有其他人找到任何其他可行的解决方法?除了launchd之外还有什么东西可以用来在OSX上启动时运行进程吗?

launchd ios jenkins

15
推荐指数
2
解决办法
9581
查看次数

launchctl子命令加载和卸载在mac os x 10.10上显示其传统子命令.如何用其他子命令替换这些子命令

我发现在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它显示消息"命令尚未实现".

注意:加载/卸载仍然有效.

macos launchd

12
推荐指数
1
解决办法
985
查看次数

launchctl - 删除启用/禁用覆盖

在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)

这会将其从文件中删除,但是当我重新启动计算机时它会再次出现.有任何想法吗?

launchd osx-yosemite launchctl

12
推荐指数
3
解决办法
1万
查看次数

使用GUI会话为所有用户启动/停止launchd代理

我需要能够从根级别守护程序启动/停止每会话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)

macos daemon launchd agent launchdagent

11
推荐指数
1
解决办法
7892
查看次数

使用Objective-C的Mac OS X守护进程 - launchd

我是Mac OS X世界的新手,但我有Windows开发技能.

我需要开发一个从Web服务上传/下载文件的守护进程(在Windows上将是Windows服务).

我的问题是:是否有可能创建一个用Objective-C编写的应用程序,它将成为守护进程(上传/下载)并在操作系统开始使用launchd时启动它?或者还有另一种创建守护进程的方法?

谢谢

macos objective-c launchd launch-daemon

11
推荐指数
1
解决办法
3229
查看次数

在launchd.conf中带有空格的setenv变量?

我是最近刚买了一台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存活.(没有空格的那些.)其余的都没有在我的环境中.

macos launchd

10
推荐指数
1
解决办法
7679
查看次数

绑定在Mac OS X 10.6上的特权端口(端口<1024)

您是否知道如何使用非Mac OS X上的root用户帐户删除对端口<1024的绑定限制?

sockets macos privileges launchd

10
推荐指数
1
解决办法
2350
查看次数

在没有root权限的情况下,在Mac OS X上定期运行shell脚本

我想在不使用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中的任何内容

有人可以帮我吗?

macos bash cron startup launchd

10
推荐指数
2
解决办法
1万
查看次数