Puncte:1

Parametrul Systemd ExecStart nu este accesibil în interiorul scriptului

drapel in

Am o situație foarte ciudată.

Am o unitate systemd

[Unitate]
Descriere=Lucrări de rezervă pentru instantanee nocturne pentru volumul [%i].

[Serviciu]
Tip=simplu
KillMode=proces
EnvironmentFile=/etc/systemd/schedule-backup_%i.conf
ExecStart=/usr/local/bin/backup.sh -s '$SOURCE' -b '$BACKUP' -t '$TITLE' -l 'backup_%i.log'

Când execut asta cu instanța de serviciu: sudo systemctl start [email protected]

scriptul backup.sh nu primește deloc ultimul parametru. Ar trebui să primească „backup_projects.log”

Citesc parametrii cu

în timp ce getopts s:b:t:l: flag
do
    cazul „${flag}” în
        s) source_path_root="${OPTARG}";;
        b) backup_path_root="${OPTARG}";;
        t) email_title="${OPTARG}";;
        l) log_name="${OPTARG}";;
    esac
Terminat

când verific jurnalele de service, se pare că scriptul este apelat cu parametrii corespunzători:

systemctl -l status [email protected] -n50

â [email protected] - Sarcina de backup de instantanee nocturnă pentru volumul [proiecte]
     Încărcat: încărcat (/etc/systemd/system/[email protected]; static)
     Activ: inactiv (mort) din Mar 2021-12-14 12:47:01 EET; acum 16 minute
TriggeredBy: â schedule-backup_projects.timer
    Proces: 8161 ExecStart=/usr/local/bin/backup.sh -s $SOURCE -b $BACKUP -t $TITLE -l backup_projects.log (code=exited, status=0/SUCCESS)
   PID principal: 8161 (cod=ieșit, stare=0/SUCCESS)
        CPU: 3.122s

14 dec. 12:46:56 fallen-robot systemd[1]: A început lucrarea de backup pentru instantanee nocturne pentru volumul [proiectelor].
14 decembrie 12:46:56 fallen-robot backup.sh[8161]: /usr/local/bin/backup.sh: linia 37: /var/log/: Este un director
14 decembrie 12:46:56 fallen-robot backup.sh[8161]: fișierul jurnal setat la /var/log/

Când execut același script din consolă, parametrul este acceptat bine. ce fac greșit?

EDIT: Se pare că a funcționat odată ce am pus parametrul -l la început și nu la sfârșit. Ar putea fi o problemă cu getopts. Voi accepta un răspuns de la oricine poate explica asta

Puncte:1
drapel in

Am găsit problema, systemd are propriile reguli pentru variabilele din EnvironmentFiles

https://fedoraproject.org/wiki/Packaging:Systemd#EnvironmentFiles_and_support_for_.2Fetc.2Fsysconfig_files

Se spune

Apoi vă puteți referi la variabilele setate în fișierul /etc/sysconfig/httpd cu ${FOOBAR} și $FOOBAR, în liniile ExecStart= (și înrudite linii). (${FOOBAR} extinde variabila într-un singur cuvânt, $FOOBAR împarte măriți valoarea variabilei de la spațiul alb în mai multe cuvinte)

După ce mi-am schimbat linia în

ExecStart=/usr/local/bin/backup.sh -s ${SOURCE} -b ${BACKUP} -t ${TITLE} -l backup_%i.log

Problemele mele au dispărut, inclusiv una cu TITLE care conținea spații albe. Fără {} TITLE a fost extins la 3 cuvinte și deoarece al doilea și al treilea apar fără „-” la getopts, va opri procesarea ulterioară a parametrilor și, astfel, va ignora partea -l backup_%i.log

getopts implementează procesarea opțiunii standard, ceea ce înseamnă că nu mai caută opțiuni atunci când vede un argument care nu este o optiune ...

curtoazie de https://unix.stackexchange.com/a/666748/499351

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.