Puncte:2

Cronometrul nu a pornit de comanda userdata după repornire

drapel co

Descrierea problemei:

La pornire, declanșăm scriptul de inițializare a serviciului care este afișat mai jos. Scriptul face parte din Instance Datele utilizatorului.

Acest script copiază lucrurile necesare serviciului/temporizatorului în systemd folder și pornește un temporizator.

Din când în când, după repornire, cronometrele noastre nu funcționează și rămân în funcțiune N / A.

The sudo systemctl restart cleanup.timer comanda nu ajută.

Numai sudo systemctl stop cleanup.timer și apoi sudo systemctl start cleanup.timer lucrări.

Avem această problemă nu numai cu un anumit cronometru. Avem o mulțime de cronometre cu aproape aceeași structură și serviciu de inițializare. Toate cronometrele sunt încărcate, dar unele dintre ele pot fi activate activ (trecut) stare și nu funcționează.

Configurația noastră:

Noi fugim Ubuntu 18.04 LTS.

Avem acest script de inițializare a serviciului:

sudo cp <CALE DE BAZĂ>/services/cleanup.service /etc/systemd/system/cleanup.service
sudo cp <CALE DE BAZĂ>/services/cleanup.timer /etc/systemd/system/cleanup.timer
sudo systemctl daemon-reload
sudo systemctl start cleanup.timer

Și asta curăţenie.serviciu:

[Unitate]
Description=Serviciul de curățare a lucrurilor
Necesită=docker.service
După=docker.service

[Serviciu]
ExecStart=<<COMANDĂ SHELL>>

Și asta curăţare.temporizator:

[Unitate]
Description=Temporizator pentru service pentru curățarea lucrurilor

[Temporizator]
OnBootSec=1min
OnUnitActiveSec=1800sec
AccuracySec=5sec

[Instalare]
WantedBy=timers.target

Acum verificați aceste comenzi:

> sudo systemctl list-timers
URMĂTOAREA STÂNGA ULTIMA UNITATE A TRUCĂ SE ACTIVĂ
n/a n/a n/a n/a cleanup.timer cleanup.service
> sudo systemctl status cleanup.timer
â cleanup.timer - Temporizator pentru service pentru curățarea lucrurilor
   Încărcat: încărcat (/etc/systemd/system/cleanup.timer; dezactivat; prestabilit furnizor: activat)
   Activ: activ (trecut) din miercuri 2021-11-17 21:07:22 UTC; acum 11 ore
  Declanșator: n/a

17 noiembrie 21:07:22 ip-XX-XX-XX-XX systemd[1]: Temporizator pornit pentru service pentru curățarea lucrurilor.

Întrebare:

Care ar putea fi cauza acestei situații și cum se poate evita?

Puncte:1
drapel jp

Se pare că ai uitat permite cronometrul.

systemctl start <unitate> pornește acel temporizator chiar acum (adică când îl instalați pentru prima dată și doriți să ruleze).

systemctl activare <unitate> nu pornește unitatea acum, dar setează cârligele relevante, astfel încât unitatea să fie pornită pe baza a ceea ce este în fișierul unității...

de exemplu. temporizatorul va porni după repornire din cauza...

[Instalare]
WantedBy=timers.target

rulează scriptul de inițializare a serviciului la fiecare pornire?

La pornire, declanșăm scriptul de inițializare a serviciului... Avem acest script de inițializare a serviciului:

Acest lucru în mod clar nu rulează cu succes, deoarece se presupune că scriptul de pornire rulează systemctl start cleanup.timer dar cleanup.timer nu a rulat sau nu a eșuat în 11 ore.

Așa că m-aș uita la jurnalele din jurul scriptului de inițializare pentru a vedea ce eșuează și de ce. S-ar putea ca scriptul dvs. de pornire să ruleze înainte ca docker să fie disponibil sau ceva de genul acesta.

drapel co
După cum am înțeles din documente, principalul profit al „activare” a fost persistența repornirii, astfel încât serviciul va fi pornit automat de către sistem. Dar pentru că scripturile „date utilizator” „pornesc” la fiecare pornire, nu am văzut niciun motiv să fac „activare”. Oricum, mulțumesc, voi verifica și testa asta. Despre `scriptul de inițializare a serviciului la fiecare pornire`. Fiecare dintre ele conține `set -e` la începutul scriptului. Deci, ar trebui să eșueze dacă oricare dintre următoarele comenzi iese cu o stare diferită de zero, dar acest lucru nu s-a întâmplat.
drapel co
Despre „Ar putea fi ca scriptul dumneavoastră de inițializare să ruleze înainte ca docker să fie disponibil sau ceva de genul acesta.”Este ciudat pentru că toate serviciile mele systemctl conțin opțiuni `Requires=` și `After=` și acest lucru ar trebui să forțeze serviciile să aștepte până când este necesar. De asemenea, au existat situații în care în același timp o parte din servicii cu aceleași opțiuni funcționau bine și o altă parte din ele nu.
mattpr avatar
drapel jp
Nu pot decât să comentez ceea ce este evident din ceea ce ai postat. Scriptul dvs. de pornire spune să porniți cronometrul, dar `journalctl -u ` arată că nu a rulat în 11 ore. Deci, fie `systemctl`/`journalctl` este greșit (nu este probabil), fie scriptul dvs. de init nu pornește cronometrul dintr-un anumit motiv (mai probabil). Așa că aș adăuga mai multă depanare/logging la scriptul de inițializare și aș arunca o privire la asta într-o serie de reporniri. Dacă poți posta mai multe, s-ar putea să te ajut mai mult.
Puncte:0
drapel ru

Încă nu sunt familiarizat cu systemd, dar din câte știu, mediul PATH nu este încă disponibil la pornire, astfel încât unele scripturi și programe setează mai întâi mediul PATH. Presupunând că serviciul dvs. rulează ori de câte ori îl rulați pe consolă, acesta ar fi întotdeauna cazul.

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.