Desejo carregar e executar automaticamente um programa Lisp no CCL em segundo plano quando o meu Mac (OS 10.9) inicializar. Eu tenho uma lista de inicialização que salvei em / 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>sudo</string>
<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>
Quando eu chamo
launchctl load /Library/LaunchDaemons/com.icecreamcomputer.plist
do terminal, posso ver em cima que o dx86cl é executado por alguns segundos e depois desaparece. Posteriormente launchd lista o trabalho como tendo saído. No entanto, se eu ligar
sudo /Applications/ccl/./dx86cl -l /Users/frank/Documents/Lisp/ice-cream-computer/ice-cream-computer.lisp
do terminal, meu programa é inicializado e continua funcionando sem problemas. O que poderia estar fazendo com que meu job de lançamento fosse encerrado imediatamente após o início?
Aqui estão as entradas do /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
Aparentemente, ele não tinha permissão para abrir um log chamado "/var/log/icecreamcomputer.log" e, de fato, não existe esse arquivo ou diretório. Embora pareça estranho porque o root / wheel possui o /var/log/icecreamcomputer.log, e o root roda o launchd e os outros processos lançados, não é? Aqui está um trecho de /var/log/icecreamcomputer.log. Ele mostra o que normalmente é impresso quando o icecreamcomputer.lisp é carregado. O que falta é uma atividade de servidor HTTP registrada, como receber e atender solicitações.
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"
Na verdade, quando faço o tail -f /var/log/icecreamcomputer.log, ele continua seus ciclos de aceleração e diz que falha ao gravar em seu log mesmo depois de eu chamar launchctl unload /Library/LaunchDaemons/com.icecreamcomputer. plist. Ele só parou de pedalar na reinicialização do servidor. O que da?
Após a reinicialização, tentei carregar o daemon novamente. Nenhuma mensagem de erro, mas a lista launchctl mostra que o processo foi encerrado e que o icecreamcomputer.log não mostrou nenhuma atividade enquanto eu carregava o plist do daemon.