A condição inicial com apenas o nível de execução especificado:
start on runlevel [2345]
acontece muito cedo no processo de inicialização. Nesse ponto, geralmente não há dispositivo de rede disponível. Além disso, muitos outros serviços ainda não foram iniciados.
Como você pode ver nesta linha de registro:
File "socket.pyx", line 489, in zmq.core.socket.Socket.bind (zmq/core/socket.c:4797) zmq.core.error.ZMQError: Permission denied
ele não pode se ligar a um soquete, o que indica que o dispositivo de rede ainda não está ativo.
O que você faria seria ajustar a condição de início para que o serviço seja iniciado mais tarde quando houver infra-estrutura suficiente disponível.
Isso é o que eu usei em uma situação onde eu precisava iniciar um serviço da web com upstart:
start on (runlevel [2345] and local-filesystems and net-device-up IFACE!=lo)
Isso garante que o serviço seja iniciado apenas quando os sistemas de arquivos locais estiverem disponíveis e quando uma conexão de rede for ativada. Aqui também é definido que um dispositivo de loopback local não é suficiente para uma conexão de rede. A estrofe requer que uma interface de rede real esteja ativa, como eth0
.
EDITAR
Em seguida, pode haver um problema de diretório padrão. O Upstart executa os programas iniciados com o diretório padrão definido como /. O aplicativo iniciado com su
provavelmente não tem privilégios suficientes para gravar seus arquivos (arquivos de log, etc.)
Tente adicionar a seguinte estrofe:
chdir /home/sagecell/sage/devel/sagecell
Isso altera o diretório padrão para um lugar onde o usuário sagecell tenha permissões de gravação.