script de inicialização do serviço systemd funcionou em 16.04, mas gera um erro em 18.04

2

Eu tenho o seguinte arquivo jenkins-agent.service colocado em /etc/systemd/system/ :

[Unit]
Description=Jenkins agent
Requires=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/bin/java -jar /home/jenkins/jenkins/Agent/agent.jar -jnlpUrl http://my.jenkins.server.com:8087/jenkins/computer/Ubuntu%2064-bit/slave-agent.jnlp -secret d1ac22621ad4c460e5f8de4f564345fa7cdb2bea1d26b6f17230451a37a08e7e -workDir "/home/jenkins/jenkins"
Restart=always

[Install]
Wants=network-online.target
WantedBy=multi-user.target

Está registrado com systemd e funcionou perfeitamente para iniciar o processo do agente Jenkins na inicialização do sistema. Mas acabei de atualizar para o 18.04 e agora esse script gera um erro de sintaxe:

systemd-analyze verify /etc/systemd/system/jenkins-agent.service
File /lib/systemd/system/systemd-journald.service:36 configures an IP firewall (IPAddressDeny=any), but the local system does not support BPF/cgroup based firewalling.
Proceeding WITHOUT firewalling in effect! (This warning is only shown for the first loaded unit using IP firewalling.)
/etc/systemd/system/jenkins-agent.service:7: Failed to resolve unit specifiers on http://my.jenkins.sever.com:8087/jenkins/computer/Ubuntu%2064-bit/slave-agent.jnlp: Invalid slot
jenkins-agent.service: Failed to create jenkins-agent.service/start: Unit jenkins-agent.service is not loaded properly: Exec format error.
Attempted to remove disk file system, and we can't allow that.

Como isso pode ser corrigido? Eu não entendo o que está errado. Ele diz que o problema é com a seção Unit , então eu verifiquei que /lib/systemd/system/network-online.target existe (ele faz).

    
por Violet Giraffe 27.04.2018 / 20:14

1 resposta

3

O problema é o uso de % aqui:

.../Ubuntu%2064-bit/...
#         ^

O SystemD usa % como palavra-chave para vários especificadores de formato interno e, em ExecStart (e irmãos), esses especificadores de formato podem ser usados para a substituição dinâmica de valores. Como não é possível interpretar %2 como um especificador adequado, você está recebendo:

Exec format error

Você precisa escapar do % com outro % :

.../Ubuntu%%2064-bit/...
    
por heemayl 27.04.2018 / 20:22