如何使用 launchd 来确保应用程序正在运行?

如何使用 launchd 来确保应用程序正在运行?

我使用 Quicksilver,这是一个非常棒的程序,可以大大提高我的工作效率。我已将其设置为登录时启动。

但是,自从 Snow Leopard 以来,它变得不太稳定了,偶尔会崩溃。而且显然它不会自动重启。

我很确定我可以使用它launchd来确保它在我登录时始终运行。有没有一个好的指南/示例,说明如何确保进程在被杀死/终止/崩溃时重新启动?

答案1

谷歌搜索launchd quicksilver我得到了这个网站...看起来是对的。

如果该页面消失,其要点如下:

  • 在 QS 偏好设置中,禁用“登录时启动”

  • 通过将以下文件存储为 ~/Library/LaunchAgents/org.quicksilver.plist 在我的帐户中创建一个新的 LaunchAgent(实际上我使用 Lingon 创建了该文件 - 非常方便的实用程序!):

<?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 版本="1.0">
<字典>
        <键> KeepAlive </键>
        <真/>
        <key>标签</key>
        <string>org.quicksilver</string>
        <键> ProgramArguments </键>
        <数组>
                <string>/Applications/Quicksilver.app/Contents/MacOS/Quicksilver</string>
        </数组>
</字典>
</plist>

有关man launchd.plist可放入 launchd plist 文件中的键的更多信息,以控制 launchd 何时以及如何启动或重新启动进程。

也可以看看:创建启动守护进程和代理

答案2

我没有尝试过,因为我没有 Mac,但有人告诉我,现在 Mac 默认 shell 是 bash。无论如何,你都可以使用登录时执行的 bash 脚本来实现这一点。

它基本上所做的是重复执行给定的命令,直到返回零,这意味着它正常关闭。

#!/bin/bash

RETVAL=1
until [ $RETVAL -eq 0 ]; do
    # change this to whatever is used to launch quicksilver
    /Applications/Quicksilver.app/Quicksilver

    RETVAL=$?
done

编辑:为了澄清起见,将其放在一个空的文本文件中(可以选择带有 .sh 扩展名)并赋予它执行权限(chmod +x filename),它应该可以工作。

相关内容