Сценарий запуска службы systemd работал в 16.04, но выдает ошибку в 18.04
У меня есть следующее jenkins-agent.service файл помещен в /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
Это зарегистрировано с systemd и отлично работал, чтобы запустить процесс агента Дженкинса при загрузке системы. Но я только что обновился до 18.04, и теперь этот скрипт выдает синтаксическую ошибку:
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.
Как это можно исправить? Я не понимаю, что не так. Это говорит о том, что проблема с Unit раздел, так что я проверил это /lib/systemd/system/network-online.target существует (есть).
1 ответ
Проблема заключается в использовании % здесь:
.../Ubuntu%2064-bit/...
# ^
SystemD использует % в качестве ключевого слова для различных внутренних спецификаторов формата, и в ExecStart (и братья) эти спецификаторы формата могут быть использованы для динамической замены значений. Как это не может интерпретировать %2 как правильный спецификатор, вы получаете:
Exec format error
Вам нужно сбежать % с другим %:
.../Ubuntu%%2064-bit/...