restart programa - raspberry PI

C, C++, Java, PHP, Ruby...

Moderator/ica: Moderatori/ce

Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
eLin
Postovi: 28
Pridružen/a: 16 ruj 2013, 21:38

restart programa - raspberry PI

Post Postao/la eLin »

Pozdrav.

Koristim jedan program kojeg je davno napravio kolega ali nazalost isti ima jedan bug a ja nemam source za njega.
Program je poveći i radi ok ali u jednom trenutku počinje primati krive podatke i mora se ga restartati.
Nakon restarta sve radi ok kojih jedan sat pa onda opet isto.

Privremeno rješenje bi bilo da se program prisilno restarta svakih sat vremena.
Kako to najbezbolnije riješiti. Znam da pid-ovi nisu najbolje riješenje ali to mi jedino pada na pamet.
Program se pokreže na system boot-u tako da je aktivan cijelo vrijeme.

Platforma: raspberry PI / debian


Molim prijedloge kako to riješiti.
Unaprijed hvala !
E.
Avatar
iweb
Site Admin
Postovi: 4641
Pridružen/a: 07 ožu 2009, 17:00
Spol: M
OS: fedora 34

Re: restart programa - raspberry PI

Post Postao/la iweb »

Mislim da bi to mogao sa killall.
Znači,

Kod: Označi sve

killall ime-programa (da ubije proces)
ime-programa (da ponovno pokrene proces)
bi mogao cronati svakih sat vremena.

EDIT: disclamer - ovo je vjerojatno jako loše rješenje jer nemam pojma o tome / može dovesti do gubitka podataka & stuff / nisam ja kriv
Avatar
Medojedni jazavac
Postovi: 1536
Pridružen/a: 22 tra 2012, 08:55
Spol: M
OS: eOS Luna
Lokacija: ForHill Croatia
Kontakt:

Re: restart programa - raspberry PI

Post Postao/la Medojedni jazavac »

cekas

Kod: Označi sve

sleep 1000
Dobijes pid

Kod: Označi sve

ps -e | grep <ime_programa>
Ugasis

Kod: Označi sve

kill -9 pid
Pa pokrenes

Kod: Označi sve

ime_programa
stefan je napisao/la:tu mač gemišta
To understand recursion, you must first understand recursion.
Avatar
jurastublic
Postovi: 1907
Pridružen/a: 16 tra 2011, 08:34
Spol: M
OS: Mint 10 LXDE itd...
Lokacija: i grupa Film

Re: restart programa - raspberry PI

Post Postao/la jurastublic »

Nije dobro baš isključivati sa kill -9 ako može normalno.
Evo napravio sam ti skriptu:

Kod: Označi sve

#!/bin/bash

# PROG upiši puni path do programa za sv. slučaj, bez razmaka kod =, npr. PROG=/usr/bin/vlc
PROG=

# glavni timer, za 1 sat je 3600 sekundi
GLAVNI_TIMER=3600

# isklj. timer, pauza nakon gašenja a prije restarta, da program ima vremena sve pospremiti
ISKLJ_TIMER=5

while :

do

   PID=$(pidof $PROG)
   if [ $PID ]; then
      kill -15 $PID && sleep $ISKLJ_TIMER
   else
      (nohup $PROG &) &>/dev/null && sleep $GLAVNI_TIMER
   fi

done
Samo je prekopiraj, ispuni prazno polje za ime programa, podesi timere, snimi i postavi dozvolu fajla na "izvršno".
I stavi negdje u autostart.
Ako baš neće krepat sa kill -15, onda tek sa kill -9.
eLin
Postovi: 28
Pridružen/a: 16 ruj 2013, 21:38

Re: restart programa - raspberry PI

Post Postao/la eLin »

Imam ti ja stariju verziju programa koja bi možda pojednostavnla stvar.
Naime kod te verzije, kad program očita krive vrijednosti, automatsko se sruši.

To bi nam u biti moglo pomoči jer ne bi trebali timer a restartao bi se točno kad treba.
Samo puknemo do while `true`; do ./imePrograma ...;

Može za to skripta ? :-)

E.
Avatar
jurastublic
Postovi: 1907
Pridružen/a: 16 tra 2011, 08:34
Spol: M
OS: Mint 10 LXDE itd...
Lokacija: i grupa Film

Re: restart programa - raspberry PI

Post Postao/la jurastublic »

Pa onda samo umjesto linije kill -15 ... stavi NOP, tj dvotočku i obriši tajmere i to je to. Kad program crasha ostat će bez PID-a i uključit se ponovo.

Kod: Označi sve

blabla...
while
do

   PID=$(pidof $PROG)
   if [ $PID ]; then
      :
   else
      (nohup $PROG &) &>/dev/null
   fi

done
eLin
Postovi: 28
Pridružen/a: 16 ruj 2013, 21:38

Re: restart programa - raspberry PI

Post Postao/la eLin »

Pozz.

Kad pokrenem ovo :

PROG =/home/pi/code/programStart

while:
do

PID=$(pidof $PROG)
if [ $PID ]; then
:
else
(nohup $PROG &) &>/dev/null
fi

done

----------------------
You must pass tha path of the uart you want to use.
Avatar
jurastublic
Postovi: 1907
Pridružen/a: 16 tra 2011, 08:34
Spol: M
OS: Mint 10 LXDE itd...
Lokacija: i grupa Film

Re: restart programa - raspberry PI

Post Postao/la jurastublic »

Prvo, imaš pogrešku jer između while i dvotočke mora biti razmak, kao while : a ne while: .
Ja sam u zadnjem primjeru slučajno izostavio, tipkam po touchscreenu.
Taj je program vjerojatno neka pos kasa ili sl. što ima neki uređaj povezan na serijski port. Moraš u PROG nakon programa dodati i naziv ser. porta (/dev/ttySx gdje je x normalno od 0-3, najlakše ćeš ga prnaći sa dmesg |grep tty).
Npr.
PROG="/usr/bin/mojakasa /dev/ttyS1"
eLin
Postovi: 28
Pridružen/a: 16 ruj 2013, 21:38

Re: restart programa - raspberry PI

Post Postao/la eLin »

Program ti čita podatke koji ti dolaze iz serijskog na USB adapter.
Ok. budem dodao pa se čujemo za dan dva...
eLin
Postovi: 28
Pridružen/a: 16 ruj 2013, 21:38

Re: restart programa - raspberry PI

Post Postao/la eLin »

OK. sad sam malo zbunjen :-)
Ne mogu definirati path do programa.

Program se nalazi u direktoriju eProg/code/mojaKasa
a ovo je user pi@raspberrypi

Probao sam:

PROG = "/home/pi/eProg/code/mojakasa /dev/ttyUSB0"
PROG = "/pi/eProg/code/mojakasa /dev/ttyUSB0"

pa sam stavio skriptu u direktorij code i probao:

PROG = "/code/mojakasa /dev/ttyUSB0"

ali cijelo vrijeme javlja no such file or directory.

Pošto na raspberriju nemam ništa tipa locate a spojen sam preko ssh nemam ideju gdje je greška.
Instalirao sam neki mlocate ali ne radi, probao sam s find ali nemam full path.

btw. program -mojaKasa- se pokreće na ovaj način:
./mojaKasa -u/dev/ttyUSB0;
Odgovori