web-dev-qa-db-fra.com

Le script de démarrage du service Systemd a fonctionné en 16.04 mais génère une erreur en 18.04

J'ai le fichier jenkins-agent.service suivant placé dans /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

Il est enregistré avec systemd et fonctionne parfaitement pour démarrer le processus de l'agent Jenkins au démarrage du système. Mais je viens de mettre à jour la version 18.04, et maintenant ce script génère une erreur de syntaxe:

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.

Comment cela peut-il être corrigé? Je ne comprends pas ce qui ne va pas. Il dit que le problème vient de la section Unit. J'ai donc vérifié que /lib/systemd/system/network-online.target existe (c'est le cas).

4
Violet Giraffe

Le problème est l'utilisation de % ici:

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

SystemD utilise % comme mot-clé pour divers spécificateurs de format internes, et dans ExecStart (et frères), ces spécificateurs de format peuvent être utilisés pour le remplacement dynamique de valeurs. Comme il ne peut pas interpréter %2 comme un spécificateur approprié, vous obtenez:

Exec format error

Vous devez vous échapper du % avec un autre %:

.../Ubuntu%%2064-bit/...
8
heemayl