我希望在我的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显示没有活动。
答案 0 :(得分:0)
将sudo
与launchctl
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脚本启动它,我得到了我想要的东西。