Bagaimana cara menentukan direktif systemd lingkungan yang mengandung =?


20

Saya ingin menentukan Environment systemdarahan yang mengandung =, misalnya

Environment=CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current

dan dapatkan kesalahannya

[/lib/systemd/system/archiva.service:10] Invalid environment assignment, ignoring: CATALINA_OPTS=-Dappserver.home\=/var/lib/archiva/apache

di journalctl -xe. Saya mencoba untuk mengutip dengan "dan 'dan melarikan diri =dengan \tanpa keberhasilan. Ini sepertinya tidak berdokumen.

Jawaban:


40

Saya pikir masalah Anda adalah karena ruang dalam isi variabel lingkungan. Melihat contoh-contoh dari systemd docs , tugas harus berupa string tunggal:

Contoh:

Environment="ONE=one" 'TWO=two two'
ExecStart=/bin/echo $ONE $TWO ${TWO}

Ini akan mengeksekusi / bin / bergema dengan empat argumen: one, two, two, dan two two.

Contoh:

Environment=ONE='one' "TWO='two two' too" THREE=
ExecStart=/bin/echo ${ONE} ${TWO} ${THREE}
ExecStart=/bin/echo $ONE $TWO $THREE

Hasil di gema ini disebut dua kali, pertama kalinya dengan argumen 'one', 'two two' too, , dan kedua kalinya dengan argumen one, two two, too.

Saya menguji ini dengan layanan berikut (perhatikan kutipan di sekitar seluruh tugas):

[Unit]
Description=My Daemon

[Service]
Environment='CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current'
ExecStart=/bin/echo ${CATALINA_OPTS}

[Install]
WantedBy=multi-user.target

Dan mendapat hasil yang diinginkan di journalctl:

Apr 26 08:19:29 laptop echo[28439]: -Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current

Tentu saja, akan lebih mudah untuk menggunakannya EnvironmentFile. Mengganti Environmentdengan yang berikut ini memberikan hasil yang diinginkan sama:

EnvironmentFile=/tmp/foo

Di mana /tmp/footerkandung (perhatikan kurangnya kutipan):

CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current

Ketika datang untuk mengutip kutipan (misalnya dengan menggunakan CATALINA_OPTSdi systemdlingkungan untuk Apache tomcat7.0.61) menggunakan EnvironmentFilebenar - benar adalah cara untuk pergi. Terima kasih!
Karl Richter

Apa direktori standar / konvensi untuk menjaga EnvironmentFile di Ubuntu? Pada sistem lain, saya telah melihat / etc / sysconfig /
Davos

1
@Do tempat yang masuk akal akan /etc/default. File di sana secara historis digunakan untuk menempatkan variabel lingkungan untuk skrip init yang sesuai.
muru

Saya sudah memiliki file ini di sistem saya / etc / environment yang berisi variabel PATH, apakah akan menambahkannya masuk akal?
Davos

1
@ DAVOS yang ada di seluruh sistem. Jika tidak ada masalah dengan variabel yang diset untuk hampir setiap proses, tentu saja. Catatan yang /etc/environmenttidak diproses oleh shell; selain dari penugasan variabel sederhana, sintaksnya sangat berbeda dari sintaks systemd yang disebutkan di atas atau sintaksis shell umum.
muru
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.