标签: launchd

如何从命令行启动/停止/重启launchd服务?

如何重新启动,例如我的 httpd 或 afpd,运行任何 Mac OS X >= 10.5 (Leopard-),而无需使用 GUI 并转到系统偏好设置 -> 共享并取消选中/选中“网络共享”?

我正在寻找与 Debian 的invoke-rc.d apache2 restart.

编辑:问题是关于一般的启动控制服务,而不是特别是 Apache(-这只是一个例子)。

mac-osx osx-leopard service launchd

170
推荐指数
4
解决办法
44万
查看次数

如何在 OS X 上激活启动日志?

如何在 OS X 10.6 上激活启动日志?

我添加了一个无法正常启动的新守护进程(状态为1)。

我想调试问题,但找不到launchd日志,它们不在/var/log/launchd.log.

mac-osx launchd launchctl

46
推荐指数
3
解决办法
4万
查看次数

在启动脚本中使用环境变量

我很好奇是否可以ProgramArguments在 Mac OS X Leopard 上的 luanchd 脚本部分指定环境变量。

<?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>me.mpietz.MountDevRoot</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>

        <string>$HOME/bin/attach-devroot.sh</string>

        <!-- Instead of using...
        <string>/Users/mpietz/bin/attach-devroot.sh</string -->
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

mac-osx osx-leopard environment-variables launchd

29
推荐指数
3
解决办法
2万
查看次数

launchctl 列表的状态列中的数字是什么意思?

launchctl 在 launchctl 列表输出中有一个“状态”列。联机帮助页或任何相关的 launchd 联机帮助页未提及此列或其含义。

mac-osx launchd launchctl

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

如何在 OS X 上启动时以特定用户身份启动进程?

我想在启动时(而不是登录时)以特定用户身份运行脚本。我认为 launchd LaunchDaemon 会做到这一点,但 'man launchd' 说:

“如果您希望您的服务作为某个用户运行,在该用户的环境中,使其成为启动代理是在 Mac OS X 上完成此任务的唯一支持的方法。换句话说,执行 setuid(2) 是不够的) 成为真正意义上的 Mac OS X 用户。”

他们不是在开玩笑——当我尝试将我的脚本作为 LaunchDaemon 运行时,它不起作用。特别是,我正在尝试使用“security”命令自动执行一些钥匙串操作,当我通过 LaunchDaemon 运行脚本时,它不会让我更改默认钥匙串,尽管脚本在从 shell 使用 sudo 运行时运行良好。

LaunchAgent 不起作用,因为目标是让进程在没有用户登录的情况下运行,而 LaunchAgents 仅在有人登录时运行。我查看了 cron 和 @reboot 指令,看起来很有希望,但我读到 cron 是在 OSX 上已弃用。

startup mac-osx launchd

11
推荐指数
3
解决办法
6164
查看次数

手动启动计划的启动作业

在我们的 Mac OS X (10.6) 服务器上,我们设置了几个由launchd特定时间控制和启动的备份脚本。为此,我们已经定义了StartCalendarInterval并且这一切都非常有效。

现在碰巧我想在计划外启动这些作业之一,但这并没有启动作业(但也没有给出错误/警告):

sudo launchctl start org.job-label
Run Code Online (Sandbox Code Playgroud)

launchtl 的联机帮助页指出,start旨在测试按需作业,没有计划作业的字样。有没有办法启动预定的作业?


得到响应后编辑:是的,手动启动计划作业也可以通过launchctl start命令进行。

mac-osx-server launchd launchctl

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

如何检查是否设置了启动服务的 OS X“禁用”标志?

根据launchctl(强调我的)手册页:

   -w 覆盖 Disabled 键并将其设置为 false。在以前的版本中,此选项会修改配置文件。现在禁用密钥的状态存储在磁盘上的其他地方。

由于禁用标志的当前状态不再在.plist文件本身中设置,因此检查Disabled密钥不再是判断服务是否会在下次启动时运行的准确方法。

这个“磁盘上的其他地方”在哪里?更重要的是(更重要的是),如何检查是否设置了此标志?

另外,是否可以将服务设置为在下次启动时运行而不强制它立即启动(如launchctl load -w /Library/LaunchDaemons/my-service.plist)?

mac-osx launchd

8
推荐指数
1
解决办法
5060
查看次数

对 launchd plist Program 和 ProgramArguments 用法的说明

有人可以澄清应该如何使用launchdProgramProgramArguments配置参数吗?我试图在命令行上注册一个服务,我会像这样开始:

$ /foo/bar/baz/python /foo/bar/baz/service start
Run Code Online (Sandbox Code Playgroud)

我已经尝试以各种方式将其分配给 launchd:

$ /foo/bar/baz/python /foo/bar/baz/service start
Run Code Online (Sandbox Code Playgroud)

或者

<key>Program</key>
<string>/foo/bar/baz/python</string>
<key>ProgramArguments</key>
<array>
    <string>/foo/bar/baz/service</string>
    <string>start</string>
</array>
Run Code Online (Sandbox Code Playgroud)

或者

<key>Program</key>
<string>/foo/bar/baz/python</string>
<key>ProgramArguments</key>
<array>
    <string>/foo/bar/baz/service start</string>
</array>
Run Code Online (Sandbox Code Playgroud)

或者

<key>ProgramArguments</key>
<array>
    <string>/foo/bar/baz/python</string>
    <string>/foo/bar/baz/service</string>
    <string>start</string>
</array>
Run Code Online (Sandbox Code Playgroud)

以及几乎任何其他似乎有意义的变体。但是,该服务总是因各种不同的错误而失败。唯一有效的方法是使用确切的行创建一个 .sh 脚本并通过 launchd运行

因此,要一劳永逸地了解launchd服务:launchd如何使用这两个配置参数,我将如何使用它们复制我的bash命令以及两者之间有什么区别?
或者我可能只是偶然发现了运行这个特定服务的问题,无论是否存在通过 bash 执行它时存在的一些环境变量?服务本身没有提供任何有用的输出。

我已经按照 中的建议查阅了execvp(3)手册条目launchd.plist(5),但这并没有真正加深我的理解。

launchd

6
推荐指数
1
解决办法
2762
查看次数

如何在 OS X 上限制启动日志大小?

正如这个答案所建议的那样,我激活了.plist我生成的文件的日志记录。

<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>
Run Code Online (Sandbox Code Playgroud)

但是,日志文件正在慢慢变大,我想知道是否有办法限制日志在.plist文件中的大小?

mac-osx launchd launchctl

6
推荐指数
1
解决办法
884
查看次数

是什么阻止我从“600”文件通过管道发送到 launchd 中的邮件?

在 OSX 10.6 中,我通过运行 logcheck.sh。使用这个 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>org.logcheck</string>
<key>Program</key><string>/opt/local/bin/logcheck.sh</string>
<key>StartInterval</key><integer>600</integer>
</dict>
</plist>

logcheck 以指定的时间间隔运行,但它不会使用以下命令向我发送邮件:

cat $TMPDIR/checkreport.$$ | $MAIL -s "$HOSTNAME $DATE system check" $SYSADMIN
Run Code Online (Sandbox Code Playgroud)

在哪里

$TMPDIR=/opt/local/var/tmp
$MAIL=/usr/bin/mail
$SYSADMIN=myuser
Run Code Online (Sandbox Code Playgroud)

但是,如果我破解它,并将命令更改为:

cat $TMPDIR/checkreport.$$ > /Users/myuser/report
cat /Users/myuser/report | $MAIL -s "$HOSTNAME $DATE system check" $SYSADMIN
Run Code Online (Sandbox Code Playgroud)

然后我收到邮件。

检查 tmp 的许可,$ls -l /opt/local/var我得到

drwx------  20 root  admin  680 Jul 12 13:29 tmp/
Run Code Online (Sandbox Code Playgroud)

如果我运行sudo /opt/local/bin/logcheck.sh第一个命令有效。

如果我/opt/local/bin/logcheck.sh …

permissions mac-osx cron launchd

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