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.

Karl Richter
sumber

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
muru
sumber
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