Como iniciar um programa em um contêiner como um serviço usando systemd-nspawn, systemd-run?

3

Como faço para executar um programa de escuta (especificamente unoconv como ouvinte) dentro de um contêiner usando systemd-nspawn , para que ele possa ser executado em segundo plano (sem um console) e ser atingido por outros processos? Por exemplo, em um mundo perfeito, seria tão fácil assim:

# something like this to start the container and program in background
systemd-nspawn -D <container path> --background <unoconv --listener> 

# something like this to connect to container and execute command
systemd-run --machine <machine name> <unoconv -f pdf file.txt>

O mais distante que eu tenho até agora é usar este guia , que faz com que o contêiner seja executado em segundo plano com% código%. No entanto, machinectl falha com o erro:

Failed to create bus connection: Permission denied.

Minha pergunta é dupla. Um, você pode resolver esse erro? Ou dois (de preferência) você pode me dar uma maneira mais simples de iniciar e conectar-se a um contêiner e executar comandos?

(Estou executando o Ubuntu Xenial em uma máquina segura sem acesso à internet)

    
por Drgabble 09.08.2016 / 11:20

1 resposta

1

Acho que depende da frequência com que você deseja executar o contêiner e quando.

Se isso é algo que você deseja executar assim que o Ubuntu carregar, toda vez que o computador for iniciado, recomendo que você tente as configurações Aplicativos de inicialização . Você pode adicionar qualquer coisa que funcione como um comando de terminal como um processo de "aplicativo" de inicialização. Alternativamente, você pode montar um script e, em seguida, executar o script como o processo de inicialização, o que lhe daria um controle mais refinado. (Lembre-se de que os itens da lista de Startup Applications são executados em ordem alfabética pelo campo Name, portanto, se a ordem de execução é importante, nomeie-a de acordo ou apenas criar um script de inicialização e torná-lo a única chamada .

Se você deseja executar o programa em uma data / hora específica recorrente, recomendo reunir um trabalho cron para fazer a mesma coisa.

Se você quiser executá-lo sob demanda ... não tenho certeza sobre isso. Eu não estou muito familiarizado com systemd-nspawn; talvez este artigo ou este artigo ajudará.

Para a pergunta 1, estou perplexo. Erro de digitação no nome da máquina, talvez? Incompatibilidade entre as permissões do sistema operacional do contêiner e as opções de autenticação de execução do systemd? Você pode tentar sshd ou < href="https://stackoverflow.com/questions/26153686/how-to-run-a-command-on-an-already-existing-docker-container"> um contêiner docker se nada mais funcionar .

Se você estiver realmente digitando como " --machine <machine name> ", alterá-lo para " --machine=<machine name> " talvez conserte. : P

    
por 12.08.2016 / 00:27