Screen-sessie starten tijdens boot

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • thomas1907
  • Registratie: Mei 2010
  • Laatst online: 09-08 15:11
Mijn vraag
Hallo Tweakers,
Ik heb een linux servertje, en daar wil ik een google map op laten draaien. Ik heb een opensource software gedownload en daar maak ik nu gebruik van. Het is een python programma dat word gestart door een "run.sh" bestand, en een pyton simplehttpserver waar een authenticatie is bijgevoegd (van internet geplukt)

Relevante software en hardware die ik gebruik
Raspberry Pi
Python
Pip
crontab

Wat ik al gevonden of geprobeerd heb
Ik heb een script geschreven "start.sh" wat 3 lijnen heeft.
cd /home/pi/pgomap
screen -dmS map sudo sh /home/pi/map/run.sh <username> <pw> "<locatie>"
screen -dmS http sudo python /home/pi/map/authweb.py 6702 <username>:<pw>
en
cd /home/pi/pgomap
screen -dmS map sudo ./run.sh <username> <pw> "<locatie>"
screen -dmS http sudo python /home/pi/map/authweb.py 6702 <username>:<pw>
en
screen -dmS map sudo sh /home/pi/map/run.sh <username> <pw> "<locatie>"
screen -dmS http sudo python /home/pi/map/authweb.py 6702 <username>:<pw>
(Allemaal met en zonder sudo geprobeerd)

Maar al deze scripts werken half. Het python webserver gedeelte (authweb.py) word wel opgestart.
Als ik heel snel inlog op mijn Pi zie ik dat de screen "sessie" map wel word gestart maar daarna weer stopt.
als ik het script buiten crontab uit voer doet hij het gewoon, maar zodra crontab het moet opstarten werkt hij niet, ik weet niet meer waar ik het gekregen heb maar er stond dat run.sh niet gevonden kon worden.

Ik hoop dat jullie mij kunnen helpen _/-\o_

[ Voor 3% gewijzigd door thomas1907 op 21-07-2016 18:22 ]

Beste antwoord (via thomas1907 op 23-07-2016 00:56)


  • BastiaanCM
  • Registratie: Juni 2008
  • Laatst online: 09:06
Projectje gehad met vergelijkbaar gebruik van screen, even mijn documentatie opgezocht. Meestal is het een PATH kwestie, of anders wel een permissie.

Anway, doe dit eens:
code:
1
2
screen -dmS map bash -c "sudo sh /home/pi/map/run.sh <username> <pw> <locatie>; exec bash"
screen -dmS http bash -c "sudo python /home/pi/map/authweb.py 6702 <username>:<pw>; exec bash"


Op deze manier kun je nog je screen in nadat je sh / python scripts gestopt zijn, eventuele output zal daar ook nog in staan, hiermee is het vast op te lossen. O en je kunt het proces zelf in de screen weer starten.

[ Voor 31% gewijzigd door BastiaanCM op 21-07-2016 22:24 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • Blokker_1999
  • Registratie: Februari 2003
  • Laatst online: 13:50

Blokker_1999

Full steam ahead

Wel, aangezien het heel even werkt kan het in principe al niet liggen aan een incorrecte $PATH . Ik neem aan dat de commando's die je uitvoert in principe output zullen produceren en dus ook kunnen aangeven wat er mis is. Ik zou daarom aanbevelen om de output van die commando's even door te sturen (zowel stdout als stderr) naar logbestanden zodat je kan zien wat er gebeurd.

No keyboard detected. Press F1 to continue.


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 30-09 22:30

Hero of Time

Moderator LNX

There is only one Legend

Dus, handmatig in een screen sessie draaien werkt gewoon zonder problemen en heb je ook geen sudo nodig, correct? Laat dan eens de cronjobs draaien met '> /home/pi/log.txt', zodat alle uitvoer daarin terecht komt. Check ook wat er aan 'mail' is binnengekomen (/var/spool/mail/pi). Vergeet ook de andere logbestanden niet te controleren.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • thomas1907
  • Registratie: Mei 2010
  • Laatst online: 09-08 15:11
Hero of Time schreef op donderdag 21 juli 2016 @ 18:41:
Dus, handmatig in een screen sessie draaien werkt gewoon zonder problemen en heb je ook geen sudo nodig, correct? Laat dan eens de cronjobs draaien met '> /home/pi/log.txt', zodat alle uitvoer daarin terecht komt. Check ook wat er aan 'mail' is binnengekomen (/var/spool/mail/pi). Vergeet ook de andere logbestanden niet te controleren.
Er is geen mail, en logs worden wel aangemaakt maar niet ingevuld.
Achter het commando in crontab heb ik > /home/pi/log.txt en in het script heb ik dat ook gedaan maar er word niks in gezet

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 30-09 22:30

Hero of Time

Moderator LNX

There is only one Legend

thomas1907 schreef op donderdag 21 juli 2016 @ 20:10:
[...]

Er is geen mail, en logs worden wel aangemaakt maar niet ingevuld.
Achter het commando in crontab heb ik > /home/pi/log.txt en in het script heb ik dat ook gedaan maar er word niks in gezet
Als je dat bij beide locaties hebt gedaan, dan issie idd leeg, omdat de laatste output waarschijnlijk een witregel is en die overschrijft al het andere. Wil je aanvullen, gebruik dan >> ipv >.

Hoe dan ook, we moeten iets van output krijgen waarom het opeens stopt. Zonder kunnen we niets, anders dan zeggen "start het zelf in screen op".

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • thomas1907
  • Registratie: Mei 2010
  • Laatst online: 09-08 15:11
Hero of Time schreef op donderdag 21 juli 2016 @ 20:44:
[...]

Als je dat bij beide locaties hebt gedaan, dan issie idd leeg, omdat de laatste output waarschijnlijk een witregel is en die overschrijft al het andere. Wil je aanvullen, gebruik dan >> ipv >.

Hoe dan ook, we moeten iets van output krijgen waarom het opeens stopt. Zonder kunnen we niets, anders dan zeggen "start het zelf in screen op".
Ookal doe ik >> dan staat er nog niks. nogsteeds leeg, heb voor elke regel een verschillend log.txt
Is er niet een makkelijke manier om een .sh bestand te starten vanaf de crontab? zonder een script oid.

Acties:
  • +1 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Waarom de fuck draai je screen vanuit cron?

Screen is voor interactieve terminals. Jij wilt een service draaien. Kijk naar systemd units.

[ Voor 53% gewijzigd door CyBeR op 21-07-2016 22:06 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • thomas1907
  • Registratie: Mei 2010
  • Laatst online: 09-08 15:11
CyBeR schreef op donderdag 21 juli 2016 @ 22:06:
Waarom de fuck draai je screen vanuit cron?
Omdat ik wil dat deze server opstart in een screen, zodat ik later er nog bij kan en commando's kan uitvoeren.
Is er een andere methode hoe ik een server automatisch kan opstarten in een screen zonder cron?

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Sorry maar dat is echt heel raar. Als je een echte service wilt draaien, dan start je 'm vanuit init of systemd. Als je er mee wilt kutten, da's prima maar dan draai je 'm in screen. In geen enkel geval komt cron er bij kijken.

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • BastiaanCM
  • Registratie: Juni 2008
  • Laatst online: 09:06
Projectje gehad met vergelijkbaar gebruik van screen, even mijn documentatie opgezocht. Meestal is het een PATH kwestie, of anders wel een permissie.

Anway, doe dit eens:
code:
1
2
screen -dmS map bash -c "sudo sh /home/pi/map/run.sh <username> <pw> <locatie>; exec bash"
screen -dmS http bash -c "sudo python /home/pi/map/authweb.py 6702 <username>:<pw>; exec bash"


Op deze manier kun je nog je screen in nadat je sh / python scripts gestopt zijn, eventuele output zal daar ook nog in staan, hiermee is het vast op te lossen. O en je kunt het proces zelf in de screen weer starten.

[ Voor 31% gewijzigd door BastiaanCM op 21-07-2016 22:24 ]


Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 12:22

CAPSLOCK2000

zie teletekst pagina 888

thomas1907 schreef op donderdag 21 juli 2016 @ 22:07:
Omdat ik wil dat deze server opstart in een screen, zodat ik later er nog bij kan en commando's kan uitvoeren.
Is er een andere methode hoe ik een server automatisch kan opstarten in een screen zonder cron?
Ja, ie is er. cron is niet bepaald de standaardmethode, dat is meer een hack voor gebruikers die geen admin zijn op hun eigen computer. De gebruikelijke manier is via het "init" systeem. Alle moderne Linux-distributies gebruiken daar "systemd" voor.

Ik zie niet welke distro jij hebt geinstalleerd, maar ga er maar van uit dat je systemd moet hebben. Je zal een "service file" moeten schrijven.

De cron-methode werkt op zich wel en kan handig zijn voor de meest eenvoudige gevallen. Als je met screen en sudo aan de slag moet dan kom je al snel op het punt dat het te gek wordt voor cron. Ik weet eerlijk gezegd niet wat het beste aansluit bij jouw kennis.

This post is warranted for the full amount you paid me for it.


Acties:
  • 0 Henk 'm!

  • Blokker_1999
  • Registratie: Februari 2003
  • Laatst online: 13:50

Blokker_1999

Full steam ahead

De reden waarom > een leeg log bestand achter laat is net om wat ik in men eerste post heb geschreven: je moet zowel stdout als stderr meenemen. Je loopt tegen een fout aan en die wordt niet in de log geschreven omdat je stderr niet mee hebt.

Maak er dus even van:

> /home/pi/log.txt 2>&1

No keyboard detected. Press F1 to continue.


Acties:
  • 0 Henk 'm!

  • BastiaanCM
  • Registratie: Juni 2008
  • Laatst online: 09:06
@Hierboven, mm. Zou ">>" ipv ">" doen, maar sowieso sla je hiermee alleen de output op van screen, en niet de output van een programma dat in screen word uitgevoerd. Denk niet dat dat veel helpt.

Acties:
  • 0 Henk 'm!

  • Blokker_1999
  • Registratie: Februari 2003
  • Laatst online: 13:50

Blokker_1999

Full steam ahead

damn, das ook weer waar. Even verder gekeken en je hebt de mogelijkheid om aan screen een -L mee te geven. Er wordt dan een logfile aangemaakt screenlog.n (waarbij n een volgnummer is) waarin de output van de sessie terug te vinden is.

No keyboard detected. Press F1 to continue.


Acties:
  • 0 Henk 'm!

  • thomas1907
  • Registratie: Mei 2010
  • Laatst online: 09-08 15:11
BastiaanCM schreef op donderdag 21 juli 2016 @ 22:19:
Projectje gehad met vergelijkbaar gebruik van screen, even mijn documentatie opgezocht. Meestal is het een PATH kwestie, of anders wel een permissie.

Anway, doe dit eens:
code:
1
2
screen -dmS map bash -c "sudo sh /home/pi/map/run.sh <username> <pw> <locatie>; exec bash"
screen -dmS http bash -c "sudo python /home/pi/map/authweb.py 6702 <username>:<pw>; exec bash"


Op deze manier kun je nog je screen in nadat je sh / python scripts gestopt zijn, eventuele output zal daar ook nog in staan, hiermee is het vast op te lossen. O en je kunt het proces zelf in de screen weer starten.
Dit heb ik geprobeerd en het werkt ook niet :?

Voor de rest zal ik vanavond alle antwoorden nalopen en proberen, iniedergeval thanks!

het werkt!
Toch het script van bastiaan met een aanpassing , zat een " in de locatie die is nu weg. _/-\o_ _/-\o_ Thanks iedereen!

[ Voor 7% gewijzigd door thomas1907 op 23-07-2016 00:57 ]


Acties:
  • 0 Henk 'm!

  • Blokker_1999
  • Registratie: Februari 2003
  • Laatst online: 13:50

Blokker_1999

Full steam ahead

Het nadeel aan die oplossing is dat je niet zomaar aan de hand van het feit dat de screen sessie nog leeft kunt nagaan of je programma nog draait en dus als het er toch uit gaat je niet mag vergeten om je screen sessie op te kuisen. Bijkomend pakt deze het onderliggende probleem (vermoedelijk toch het ontbreken van je PATH) niet aan.

Het toevoegen van je PATH variabele kan je gewoon doen door deze bovenaan in je crontab te zetten:

# crontab -l
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# m h  dom mon dow   command
15 15 * * * /root/script.sh 

No keyboard detected. Press F1 to continue.


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Licht gerelateerd hieraan. Ik zou aanraden tmux eens te proberen, is een heel stuk uitgebreider en veel beter te scripten dan screen.

Blog [Stackoverflow] [LinkedIn]

Pagina: 1