Como escapar de espaços em arquivos de unidade do systemd?

2

Meu arquivo de unidade se parece com isso (já tentei escapar de espaços como \x20 , como dizem os documentos):

[Unit]
Description=My Service

[Service]
Type=simple
WorkingDirectory=/home/cobra/my\x20service/
ExecStart=/home/cobra/my\x20service/start.sh

[Install]
WantedBy=multi-user.target

mas ao tentar iniciá-lo, ele falha com a seguinte mensagem:

Failed at step CHDIR spawning /home/cobra/my service/start.sh: No such file or directory
myservice.service: main process exited, code=exited, status=200/CHDIR

Atribuindo o caminho desta mensagem de erro para stat returns:

  File: ‘/home/cobra/my service/start.sh’
  Size: 280             Blocks: 8          IO Block: 4096   regular file
Device: 903h/2307d      Inode: 4718912     Links: 1
Access: (0754/-rwxr-xr--)  Uid: ( 1000/   cobra)   Gid: ( 1000/   cobra)
Access: 2015-05-24 22:42:12.702657594 +0200
Modify: 2015-03-27 22:28:05.682531000 +0100
Change: 2015-05-24 22:40:58.830298787 +0200
 Birth: -

Não é possível remover os espaços do nome do arquivo, pois o serviço que estou tentando executar exige-os por algum motivo.

Onde estou indo errado?

    
por Cobra_Fast 25.05.2015 / 00:47

3 respostas

4

A maneira correta de gerar caminhos no systemd é usar o systemd-escape.

ou seja,

~$ systemd-escape --path "/home/cobra/my service/start.sh"
home-cobra-my\x20service-start.sh

Sim, / é substituído por -

    
por 04.06.2015 / 04:18
1

A coisa óbvia a fazer é usar aspas duplas.

ExecStart="/home/cobra/my service/start.sh"

Você também deve se livrar do script start.sh e mover qualquer lógica necessária para a unidade.

    
por 25.05.2015 / 01:03
0

Para espaços no ExecStart, há um relatório de bug aberto. [1] A solução alternativa é usar /usr/bin/env seguido pelo caminho entre aspas. Exemplo:

ExecStart=/usr/bin/env "/path/with spaces/executable"

A solução canônica - mas não tão legal - é usar systemd-escape .

systemd-escape --path "/path/with spaces/executable"

[1] https://github.com/systemd/systemd/issues/2132

    
por 30.07.2016 / 04:42