已启动作业但随后立即退出

时间:2014-04-16 03:08:31

标签: macos launchd

我希望在我的Mac(OS 10.9)启动时在后台自动加载并运行CCL中的Lisp程序。我有一个已发送的plist,我已保存到/ Library / LaunchDaemons,

<?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>com.icecreamcomputer</string>
    <key>ProgramArguments</key>
    <array>
            <string>/Applications/ccl/./dx86cl</string>
            <string>-l</string>
            <string>/Users/frank/Documents/Lisp/ice-cream-computer/ice-cream-computer.lisp</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>

当我打电话

launchctl load /Library/LaunchDaemons/com.icecreamcomputer.plist

从终端,我可以看到顶部dx86cl运行几秒钟,然后消失。之后,launchd将工作列为已退出。但是,如果我打电话

sudo /Applications/ccl/./dx86cl -l /Users/frank/Documents/Lisp/ice-cream-computer/ice-cream-computer.lisp

从终端,我的程序启动并保持运行没有问题。什么可能导致我的启动工作在启动后立即退出?

以下是/var/log/system.log中的条目:

Apr 15 10:01:55 frynseytv.icecreamcomputer.com sudo[34963]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/Applications/ccl/./dx86cl -l /Users/frank/Documents/Lisp/ice-cream-computer/ice-cream-computer.lisp
Apr 15 10:01:58 frynseytv com.apple.launchd[1] (com.icecreamcomputer): Throttling respawn: Will start in 8 seconds
Apr 15 10:02:00 frynseytv com.apple.launchd.peruser.501[306] (com.icecreamcomputer[34965]): open("/var/log/icecreamcomputer.log", ...): 13: Permission denied
Apr 15 10:02:02 frynseytv com.apple.launchd.peruser.501[306] (com.icecreamcomputer): Throttling respawn: Will start in 8 seconds

显然,它没有权限打开一个名为&#34; /var/log/icecreamcomputer.log的日志,&#34;实际上并不存在这样的文件或目录。虽然这看起来很奇怪,因为root / wheel拥有/var/log/icecreamcomputer.log,root运行启动,其他进程启动启动,不是吗?这是来自/var/log/icecreamcomputer.log的摘录。它显示了当icecreamcomputer.lisp加载时通常打印到stdout的内容。缺少的是记录的http服务器活动,如接收和履行请求。

Welcome to Clozure Common Lisp Version 1.9-r15759  (DarwinX8664)!
? 
==== quicklisp quickstart loaded ====

To continue with installation, evaluate: (quicklisp-quickstart:install)

For installation options, evaluate: (quicklisp-quickstart:help)

To load "hunchentoot":
Load 1 ASDF system:
hunchentoot
; Loading "hunchentoot"

实际上,当我关闭-f /var/log/icecreamcomputer.log时,它会继续调整respawns的周期,并说即使在我调用launchctl unload /Library/LaunchDaemons/com.icecreamcomputer之后它也无法写入其日志。 plist中。它只在服务器重启时停止循环。是什么赋予了?

重启后,我尝试再次加载守护进程。没有错误消息,但是launchctl列表显示进程已退出,并且在我加载守护进程的plist时,tailing icecreamcomputer.log显示没有活动。

2 个答案:

答案 0 :(得分:0)

sudolaunchctl

一起使用
sudo launchctl load /Library/LaunchDaemons/com.icecreamcomputer.plist  

这将修复权限被拒绝错误:

Apr 15 10:02:00 frynseytv com.apple.launchd.peruser.501[306] (com.icecreamcomputer[34965]): open("/var/log/icecreamcomputer.log", ...): 13: Permission denied

答案 1 :(得分:0)

可能是我的程序加载的一个库包执行了launchd禁止的操作,比如分叉进程。我已经尝试过的更简单的hello world程序运行良好。最终,通过将程序移动到Raspbian Linux机器并使用init脚本启动它,我得到了我想要的东西。