Problem med at køre script fra /etc/init.d/ i opstart [Løst]

Problem med at køre script fra /etc/init.d/ i opstart [Løst]

Indlægaf Kim » man 17. aug 2015 12:38

Håber emnet er oprettet det rigtige sted.

HW: Raspberry Pi 2
Linux: RASPBIAN version 3.18.11-v7+

Hej, jeg er ret så ny i Linux verdenen, jeg har tidligere prøvet mig lidt frem, men må sige at jeg skal behandles som spritny bruger ;)

Jeg vil bruge min Raspberry Pi 2 med tilhørende Pi cam som overvågnings kamera, koblet op mod min Synology NAS.
Det kan gøres via noget Onvif service, hvor jeg har fulgt nedenstående vejledning:
https://github.com/BreeeZe/rpos

Ovenstående har jeg installeret under brugeren "pi", dog med de kommandoer som vejledningen giver. f.eks hvis der skal bruges "sudo".

Efter installation kan jeg cd ind i "cd /home/pi/rpos-0.1.0/" og køre kommandoen "sudo node rpos.js" hvorefter jeg kan sætte kameraet op i min Synology surveilance program. Alt virker som det skal.

Men... problemet kommer når jeg vil starte scriptet op hvis raspberry'en genstartes efter f.eks et strømsvigt.
Hvis jeg starter "rpos.js" scriptet fra en anden lokation (path), så findes der forskellige referancer i scriptet, som kalder andre resourcer som f.eks. "require("./lib/extension");"

Så når jeg prøver at oprette et script der skal køres ved opstart i "/etc/init.d/StartCam" så får jeg også kaldt "rpos.js", men den kommer hurtigt og siger "no such file or directory" da den begynder at lede efter en relativ sti som scriptet indeholder. Og nu hvor jeg står et andet sted, findes dette ikke.

Se eksempel hvor jeg vil køre scriptet fra init.d folderen:

Kode: Vælg alt
pi@raspi /etc/init.d $ sudo node /home/pi/rpos-0.1.0/rpos.js


Resultatet er:
---------------
Kode: Vælg alt
Using IP address from config: 192.168.1.15
Manufacturer : Raspberry Pi
Model : 2 B
HardwareId :
SerialNumber : 00000000e0866553
FirmwareVersion : 0.1.0
Starting camera settings webserver on http://192.168.1.15:8081/
Uncaught Exception... : Error: ENOENT, no such file or directory './bin/rtspServer'
    at Error (native)
    at Object.fs.chmodSync (fs.js:948:18)
    at new Camera (/home/pi/rpos-0.1.0/lib/camera.js:54:12)
    at Object.<anonymous> (/home/pi/rpos-0.1.0/rpos.js:23:14)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
pi@raspi /etc/init.d $



Jeg har prøvet mange forskellige måder for at komme uden om denne problemstilling, men jeg ender med at få samme problem hele tiden.
Jeg prøvede endda at oprette et bash script i folderen hvor "rpos.js" scriptet ligger, så jeg fra init.d folderen kan starte bash scriptet, og dermed håbe at eksekveringen forholder sig til bash scriptets "path", men det virker heller ikke...

Det er muligt at det er et simpelt fix, men jeg søger åbenbart efter de forkerte ting i google, så jeg sidder fast.

Håber der er nogen der kan pege mig i den rigtige retning.
Kim
 
Indlæg: 6
Tilmeldt: man 17. aug 2015 12:29
Brugererfaring med Linux:: Helt uøvet

Re: Problemer med at køre script fra /etc/init.d/ som opstar

Indlægaf Uffe » man 17. aug 2015 17:54

Hej Kim - og :welcomewav:

Det kniber lige lidt med tiden her i aften, men ............ måske jeg kan smide lidt hjælp til selvhjælp :wink:

Først, så har jeg kun leget en smule med scripts, men har du gjort det eksekverbart :?: og er ejeren og gruppen "root" på det script :?: - læs evt. lidt om det her

Hvis ikke det hjælper dig så post endelig igen - det kan dog godt være at jeg ikke får tid at svare dig før i morgen aften - men jeg skal prøve :cool:

:cheers:
Mvh.
Uffe

Ubuntu minimal m/ Mate desktop 64bit
Asrock N68-GE3 UCC - AMD X4 640 - 4 Gb Kingston ram
OCZ Vertex 4 SSD 60 Gb + 500 Gb WD sATA HD

Ultimate Edition 2.9 64bit
Asrock 2core 1333-2.66G - 2 Gb Kingston ram
750 Gb Samsung WD sATA HD
Plextor DVD-RW - Asus 24" fladskærm

Omega T107, 7" Kina Android tablet
Brugeravatar
Uffe
Site Admin
Site Admin
 
Indlæg: 2105
Tilmeldt: man 20. apr 2009 15:42
Geografisk sted: Hornslet, Syddjurs
Brugererfaring med Linux:: Øvet

Re: Problemer med at køre script fra /etc/init.d/ som opstar

Indlægaf Kim » tirs 18. aug 2015 07:23

Hej Uffe, tak for lidt respons :)

Umiddelbart ser jeg ikke nogle problemer med rettigheder i den fejlmeddelelse jeg får, og man kan også køre scriptet som "sudo" så der burde ikke være nogle problemer der.
Alligevel har jeg nu også kørt "sudo chown -R root:root ./rpos-0.1.0" så hele folderen nu har root som ejer og gruppe, men det giver stadig samme resultat --> den kan ikke finde en fil, da den prøver at finde filen et forkert sted, da da tager udgangspunkt i den folder jeg står i, da jeg kalder script filen.

Se nedenstående:

Kode: Vælg alt
pi@raspi /etc/init.d $ sudo node /home/pi/rpos-0.1.0/rpos.js
Using IP address from config: 192.168.1.15
Manufacturer : Raspberry Pi
Model : 2 B
HardwareId :
SerialNumber : 00000000e0866553
FirmwareVersion : 0.1.0
Starting camera settings webserver on http://192.168.1.15:8081/
Uncaught Exception... : Error: ENOENT, no such file or directory './bin/rtspServer'
    at Error (native)
    at Object.fs.chmodSync (fs.js:948:18)
    at new Camera (/home/pi/rpos-0.1.0/lib/camera.js:54:12)
    at Object.<anonymous> (/home/pi/rpos-0.1.0/rpos.js:23:14)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
pi@raspi /etc/init.d $ /


Altså, virker det som om scriptet prøver at finde "/bin/rtspServer" i forhold til "/etc/init.d" stien, og dermed fejler, da der ikke findes "rtspServer".

Spørgsmålet er at jeg måske kun kan komme uden om denne problemstilling, ved at installere programmerne under root(?) så de bliver placeret i /bin/ og /lib/ folderne? (om og hvordan det kan gøres ved jeg ikke)

Det er bare underligt - for mig - at man ikke kan kalde et script, som så bruger den relative sti i forhold til det script som kalder andre scriptfiler eller resourcer.

Nedenstående er et udklip af den fil som kalder "./bin/rtspServer" filen før den ender i en exception.

Kode: Vælg alt
pi@raspi ~/rpos-0.1.0 $ cd lib/
pi@raspi ~/rpos-0.1.0/lib $ nano camera.js

...
        fs.chmodSync("./bin/rtspServer", "0755");
    }
    Camera.prototype.setupWebserver = function () {
...


Rettigheder for rtspServer:
Kode: Vælg alt
pi@raspi ~/rpos-0.1.0/bin $ ls -l
total 500
-rwxr-xr-x 1 root root 508476 May  8 21:27 rtspServer
pi@raspi ~/rpos-0.1.0/bin $


Håber det har givet lidt bedre info.
Kim
 
Indlæg: 6
Tilmeldt: man 17. aug 2015 12:29
Brugererfaring med Linux:: Helt uøvet

Re: Problemer med at køre script fra /etc/init.d/ som opstar

Indlægaf Uffe » tirs 18. aug 2015 17:50

Hej Kim

Kan du ikke prøve at poste det eksakte indhold af det script du har lavet i /etc/init.d

:cheers:
Mvh.
Uffe

Ubuntu minimal m/ Mate desktop 64bit
Asrock N68-GE3 UCC - AMD X4 640 - 4 Gb Kingston ram
OCZ Vertex 4 SSD 60 Gb + 500 Gb WD sATA HD

Ultimate Edition 2.9 64bit
Asrock 2core 1333-2.66G - 2 Gb Kingston ram
750 Gb Samsung WD sATA HD
Plextor DVD-RW - Asus 24" fladskærm

Omega T107, 7" Kina Android tablet
Brugeravatar
Uffe
Site Admin
Site Admin
 
Indlæg: 2105
Tilmeldt: man 20. apr 2009 15:42
Geografisk sted: Hornslet, Syddjurs
Brugererfaring med Linux:: Øvet

Re: Problemer med at køre script fra /etc/init.d/ som opstar

Indlægaf Kim » tirs 18. aug 2015 18:09

Uffe skrev:Hej Kim

Kan du ikke prøve at poste det eksakte indhold af det script du har lavet i /etc/init.d

:cheers:


Jo selvfølgelig.

Jeg har to script, da jeg ville prøve at komme udenom problemet med den relative sti, så:
Første script i init.d mappen er dette:

Kode: Vælg alt
#! /bin/sh
# /etc/init.d/CamNode

### BEGIN INIT INFO
# Provides:          CamNode
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Simple script to start a program at boot
# Description:       A simple script from www.stuffaboutcode.com which will st$
### END INIT INFO

# If you want a command to always run, put it here

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting CamNode"
    # run application you want to start
    /home/pi/rpos-0.1.0/CamNode start
    ;;
  stop)
    echo "Stopping CamNode"
    # kill application you want to stop
    /home/pi/rpos-0.1.0/CamNode stop
    ;;
  *)
    echo "Usage: /etc/init.d/CamNode {start|stop}"
    exit 1
    ;;
esac

exit 0


Som du/I kan se kalder det et andet script jeg har lagt i rpos-0.1.0 folderen, og indholdet får i her:

Kode: Vælg alt
#! /bin/bash
# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting CamNode"
    # run application you want to start
    sudo forever start rpos.js
    ;;
  stop)
    echo "Stopping CamNode"
    # kill application you want to stop
    sudo forever stop rpos.js
    ;;
  *)
    echo "Usage: CamNode {start|stop}"
    exit 1
    ;;
esac

exit 0

Det gør ingen forskel om jeg bruger kommando "node" eller "forever" til at starte scriptet, da forever blot sikre at scriptet køre, ellers vil den forsøge at få det op og køre igen. Undalfet er det samme med de manglende resourcefiler.
Kim
 
Indlæg: 6
Tilmeldt: man 17. aug 2015 12:29
Brugererfaring med Linux:: Helt uøvet

Re: Problemer med at køre script fra /etc/init.d/ som opstar

Indlægaf Uffe » tirs 18. aug 2015 18:46

Hej Kim

Først så vil jeg lige kontakte Kåre, han er vist mere inde i der her end jeg er :mrgreen:

...............men, tygger lige lidt mere på den selv også :wink:

:cheers:
Mvh.
Uffe

Ubuntu minimal m/ Mate desktop 64bit
Asrock N68-GE3 UCC - AMD X4 640 - 4 Gb Kingston ram
OCZ Vertex 4 SSD 60 Gb + 500 Gb WD sATA HD

Ultimate Edition 2.9 64bit
Asrock 2core 1333-2.66G - 2 Gb Kingston ram
750 Gb Samsung WD sATA HD
Plextor DVD-RW - Asus 24" fladskærm

Omega T107, 7" Kina Android tablet
Brugeravatar
Uffe
Site Admin
Site Admin
 
Indlæg: 2105
Tilmeldt: man 20. apr 2009 15:42
Geografisk sted: Hornslet, Syddjurs
Brugererfaring med Linux:: Øvet

Re: Problemer med at køre script fra /etc/init.d/ som opstar

Indlægaf kaare » tirs 18. aug 2015 21:53

Jeg tænker at hvis du kan får skidtet til at virke når du står i det rigtige working dir., så burde du vel bare kunne
fyre den af i en subshell sådan her:

$ (cd /home/pi/rpos-0.1.0/ && sudo node rpos.js)

Husk at det skal være inde i parenteser :)

--
kåre
----
Kåre Sørensen
kaare
Site Admin
Site Admin
 
Indlæg: 65
Tilmeldt: man 18. maj 2009 19:48
Geografisk sted: Århus C
Brugererfaring med Linux:: Meget øvet

Re: Problemer med at køre script fra /etc/init.d/ som opstar

Indlægaf Uffe » tirs 18. aug 2015 23:06

Hej Kim

Jeg har (ind imellem andet jeg havde at gøre) kigget lidt rundt og måske :crossfingers: fundet nogle svar, men er det ikke sådan at du kan starte hele programmet logget ind som user med kommandoen
Kode: Vælg alt
CamNode
eller skal der sudo foran ?
og skal rpos.js startes separart :?: - og hvis den skal det, kræver det så også sudo :?:

Jeg har kun rodet lidt med scripts som blev kørt fra desktoppen så jeg har også været på rundfart med google :wink:
Jeg kiggede foruden hvordan init.d-scripts skrues sammen også lidt på runlevels og formoder at dit program først skal starte når maskinen er bootet helt op. Hvilket runlevel du bruger kan du finde ud af med kommandoen
Kode: Vælg alt
runlevel



Jeg synes jeg støder ind i en forfærdelig masse ufuldstændige og divergerende forklaringer på det her, men har dog fundet at der sandsynligvis er nød til at være et symbolsk link oprettet i en af /etc/rc.d mapperne ifølge den her side http://www.thelinuxdaily.com/2010/01/automatically-start-a-script-at-linux-bootup/

Er nu så tilpas nysgerrig og stædig, så jeg vil gerne følge den her til dørs. Finder du løsningen selv inden jeg får tid at kigge mere på det i morgen, så post den endelig. Det gør det så heller ikke lettere at jeg ikke har noget lignende hardware at teste på :me-no:
Mvh.
Uffe

Ubuntu minimal m/ Mate desktop 64bit
Asrock N68-GE3 UCC - AMD X4 640 - 4 Gb Kingston ram
OCZ Vertex 4 SSD 60 Gb + 500 Gb WD sATA HD

Ultimate Edition 2.9 64bit
Asrock 2core 1333-2.66G - 2 Gb Kingston ram
750 Gb Samsung WD sATA HD
Plextor DVD-RW - Asus 24" fladskærm

Omega T107, 7" Kina Android tablet
Brugeravatar
Uffe
Site Admin
Site Admin
 
Indlæg: 2105
Tilmeldt: man 20. apr 2009 15:42
Geografisk sted: Hornslet, Syddjurs
Brugererfaring med Linux:: Øvet

Re: Problemer med at køre script fra /etc/init.d/ som opstar

Indlægaf Kim » tirs 18. aug 2015 23:12

kaare skrev:Jeg tænker at hvis du kan får skidtet til at virke når du står i det rigtige working dir., så burde du vel bare kunne
fyre den af i en subshell sådan her:

$ (cd /home/pi/rpos-0.1.0/ && sudo node rpos.js)

Husk at det skal være inde i parenteser :)

--
kåre


Se det var lige det som skulle til. :bowdown:
Jeg får godt nok ikke forbindelse fra synology til raspberry efter genstart hvor scriptet i init.d skulle startes, men det kan være noget andet noget med "forever" programmet.
Når jeg står i init.d folderen og starter scriptet, så virker det som det skal.

Mange tak, jeg har nok brugt flere dage, hvis man lægger timerne sammen, for at læse op på hvad man kunne gøre, og svaret er altså et subshell :)
Kim
 
Indlæg: 6
Tilmeldt: man 17. aug 2015 12:29
Brugererfaring med Linux:: Helt uøvet

Re: Problemer med at køre script fra /etc/init.d/ som opstar

Indlægaf Kim » tirs 18. aug 2015 23:22

Jeg har kun rodet lidt med scripts som blev kørt fra desktoppen så jeg har også været på rundfart med google :wink:
Jeg kiggede foruden hvordan init.d-scripts skrues sammen også lidt på runlevels og formoder at dit program først skal starte når maskinen er bootet helt op. Hvilket runlevel du bruger kan du finde ud af med kommandoen
Kode: Vælg alt
runlevel


Hej Uffe.
Det er muligt at det sidste jeg skal rode lidt med, kan være relateret til runlevel, men jeg skal lige have lidt søvn og en kop kaffe før jeg vil nyde at scriptet i det mindste kan finde sine resourcer, selvom det bliver eksekveret fra en anden folder, nu hvor det kan køres som med en subshell.

Det kan være jeg mangler at køre følgende ( i forhold til en anden guide), før det virker ved opstart.
Kode: Vælg alt
Register script to be run at startup:
$ sudo update-rc.d CamNode defaults


En anden guide, siger at jeg i stedet skal bruge /etc/rc.local til at starte mit script.
Det må jeg se på i morgen.

Jeg takker mange gange for jeres hurtige hjælp.
Kim
 
Indlæg: 6
Tilmeldt: man 17. aug 2015 12:29
Brugererfaring med Linux:: Helt uøvet

Næste

Tilbage til Debian og Debian-baserede distributioner

Hvem er online

Brugere der læser dette forum: Ingen og 1 gæst