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.