GNU/Linux >> Belajar Linux >  >> Linux

systemd - Memberikan banyak argumen pada layanan saya

Ya kamu bisa! Tentukan mereka dalam file di suatu tempat dan tambahkan ke EnvironmentFile di Layanan systemd Anda. Misalnya, isi /etc/.progconf adalah:

ARG1=-o
ARG2=--verbose

Dan file .service Anda:

EnvironmentFile=/etc/.progconf
ExecStart = /usr/bin/prog $ARG1 $ARG2

Anda dapat menulis ke file itu jika Anda perlu mengubahnya saat dalam perjalanan. Layanan tidak boleh terlalu sering mengubah opsinya, mungkin pertimbangkan memulai otomatis atau cron jika Anda perlu mencapainya.

Untuk contoh lebih lanjut, periksa:https://wiki.archlinux.org/index.php/Systemd/Services


Saya ingin melakukan hal yang sama, tetapi tanpa file terpisah untuk setiap kombinasi argumen. Saya menemukan bahwa saya bisa menyampaikan satu argumen panjang dengan spasi dan kemudian menggunakan fitur pemisah ruang variabel lingkungan systemd untuk memisahkan argumen.

Saya membuat layanan dengan nama file [email protected] (perhatikan tanda 'at sign' yang diperlukan saat layanan mengambil argumen ).

[Unit]
Description=Test passing multiple arguments

[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS

Saya menjalankan ini dengan sudo systemctl start [email protected]"arg1 arg2 arg3".service dan melewati arg1 , arg2 dan arg3 sebagai argumen baris perintah terpisah untuk test.py.


Yang paling mudah saya temukan adalah:

ExecStart=/bin/bash -c "\"/path/with spaces/to/app\" arg1 arg2 arg3 \"arg with space\""

Menjaga semuanya mandiri.

Karena itu, saya telah menemukan bahwa setidaknya di Ubuntu 18.04 LTS, saya bahkan tidak perlu melakukan itu, saya dapat melakukan ini dan berfungsi dengan baik:

ExecStart="/path/with spaces/to/app" arg1 arg2 arg3 "arg with space"

$vars berfungsi sebagai argumen dengan pola ini juga.


Linux
  1. Cara membuat layanan Systemd di Linux

  2. Layanan Systemd Tidak Akan Memulai Nodejs?

  3. Cara mengarahkan output dari layanan systemd ke file

  1. @reboot tidak berfungsi di CRON

  2. Bagaimana menghentikan layanan systemd

  3. Systemd dengan banyak execStart

  1. redirect log layanan systemd ke file

  2. aktivasi soket systemd vs xinetd

  3. Bagaimana cara mengirim email jika layanan systemd di-restart?