init.d script werkt niet vanuit crontab

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 29-09 09:17
Ik heb een nogal stom probleem waarvan ik echt de oorzaak niet kan achterhalen. Ik gebruik "TinyTinyRSS" als feed aggregator. Echt übergoed systeem en een volwaardige self-hosting vervanger voor Google Reader. Dat terzijde, ik heb namelijk problemen met het init.d script dat ikzelf in elkaar heb ge-copy-pasted.

De feiten:
  • TTRSS is een PHP script
  • TTRSS draait in directory /smb/www/blabla/ttrss
  • Ik heb onderstaande init.d script in m'n /etc/init.d gezet, rechten 0750x
  • Ik wil het script draaien onder user rogier
Als ik nu zelf, onder user rogier, met de hand "service ttrss start" intyp, dan wordt het zaakje goed gestart. Alleen als ik in m'n crontab (dus van user rogier) het volgende zet: "@reboot /etc/init.d/ttrss start", dan zie ik wel dat er een PID file wordt aangemaakt, maar daar blijft het ook bij. Er draait verder niets op de achtergrond. Wat maakt nu het verschil? Waarom gaat het "met de hand" wel goed terwijl vanuit crontab het niet goed gaat? Het is exact hetzelfde script!

Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/sh
NAME=ttrss
PIDFILE=/smb/www/blabla/ttrss/lock/ttrss.pid
LOGFILE=/smb/logs/ttrss.log
DAEMON="/usr/bin/php"
DAEMON_OPTS="./update.php --daemon --log ${LOGFILE}"
APPDIR=/smb/www/blabla/ttrss
USER=rogier

case "$1" in
   start)
      echo "Starting daemon: "$NAME
      /sbin/start-stop-daemon --start --chdir $APPDIR --background --quiet --chuid $USER --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS
      ;;
   stop)
      echo "Stopping daemon: "$NAME
      /sbin/start-stop-daemon --stop --chdir $APPDIR --quiet --chuid $USER --oknodo --pidfile $PIDFILE
      ;;
   *)
      echo "Usage: "$1" {start|stop}"
      exit 1
esac

exit 0

Acties:
  • 0 Henk 'm!

  • RedPixel
  • Registratie: Januari 2004
  • Laatst online: 20:12
Volgens mij worden scripts in /etc/init.d sowieso al automatisch gestart, dus zou je het script niet ook nog ens in je crontab hoeven zetten, want dan start het twee keer.. Misschien dat dit een race condition oplevert tijdens het booten?

Wie is de owner van het script? Volgens mij verwacht SysVinit dat de scripts van root:root zijn..

I see red pixels.


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 21:30

Hero of Time

Moderator LNX

There is only one Legend

Het lijkt mij verstandig als je wat meer inleest in het maken van init scripts. Kijk maar eens hoe /etc/init.d/skeleton eruit ziet en wat er in /etc/init.d/README staat. Scripts horen root:root te zijn en 0755.

Een goed init script wordt door root uitgevoerd en dropt z'n privileges voor een andere gebruiker zodra dat kan. Zoals hierboven is aangegeven, wordt /etc/init.d gebruikt (of eigenlijk sinds systemd, werd) voor het beschikbaar maken van scripts die bij boot en/of shutdown uitgevoerd moeten worden. Maar het neerzetten ervan doet nog niets, daarvoor moet je eerst nog update-rc.d of chkconfig gebruiken (of wat je distro ook maar gebruikt) om 'm in de juiste rc?.d mappen te zetten om uit te voeren onder bepaalde runlevels.

Wat jij nu hebt hoeft helemaal niet in een init script, die kan je ook gewoon in $HOME/bin gooien. Of waar je ook maar wilt.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 29-09 09:17
Sorry, typo van mijn kant. Het script is wel degelijk 0755, root:root

code:
1
-rwxr-xr-x   1 root root  670 Aug 13 10:49 ttrss*

En ik heb uiteraard ook geprobeerd om middels "sudo update-rc.d ttrss defaults" het script automatisch te laten opstarten tijdens startup. Dit werkt echter niet en ik kan er maar niet achterkomen waarom niet. Hoe moet ik dit debuggen?

By the way, het script in $home/bin zetten vind ik ook prima, zolang het maar gedraaid wordt tijdens het opstarten. Dit lukt me nu dus niet.

[ Voor 16% gewijzigd door smeerbartje op 13-08-2014 13:20 ]


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 21:30

Hero of Time

Moderator LNX

There is only one Legend

Heb je nou al een ander init script bekeken? Je gebruikt blijkbaar een Debian based distro. Let dan eens goed op de hele header in zo'n script. Het draaien van update-rc.d geeft je eigenlijk altijd wel iets van uitvoer als 't niet goed is.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • daft_dutch
  • Registratie: December 2003
  • Laatst online: 08-09 21:46

daft_dutch

>.< >.< >.< >.<

wwwhizz schreef op woensdag 13 augustus 2014 @ 12:07:
Volgens mij worden scripts in /etc/init.d sowieso al automatisch gestart, [...]
Dit is onjuist. Alle services staan in /etc/init.d beschreven. Als deze gestart worden is de service gesymlinked naar je (meestal multiuser) runlevel configuratie /etc/rc[2|5].d

aangemaakt via de update-rc.d tooling.

>.< >.< >.< >.<


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 21:30

Hero of Time

Moderator LNX

There is only one Legend

Met systemd niet meer, daar staat alles in /lib/systemd/system. Alles in /etc/init.d/ is legacy en staat er alleen nog maar ter referentie. Nou heb ik mij er nog niet echt in verdiept, maar iig met Fedora 20 staat er praktisch niets meer in init.d. Chkconfig --list laat dan ook zo goed als niets zien. Debian is net om, Jessie zal standaard met systemd komen en ik verwacht dat Ubuntu 14.10 er ook mee komt (die pakt tenslotte een snapshot van Debian Testing en bouwt daar op verder).

Commandline FTW | Tweakt met mate


  • wimdebok
  • Registratie: December 2010
  • Laatst online: 29-09 12:11
Hero of Time schreef op woensdag 13 augustus 2014 @ 23:52:
Met systemd niet meer, daar staat alles in /lib/systemd/system. Alles in /etc/init.d/ is legacy en staat er alleen nog maar ter referentie. Nou heb ik mij er nog niet echt in verdiept, maar iig met Fedora 20 staat er praktisch niets meer in init.d. Chkconfig --list laat dan ook zo goed als niets zien. Debian is net om, Jessie zal standaard met systemd komen en ik verwacht dat Ubuntu 14.10 er ook mee komt (die pakt tenslotte een snapshot van Debian Testing en bouwt daar op verder).
Inderdaad ja. Tsja, interessant, zit nu al dagen te lezen over de overgang van de sysvinit scripts naar het nieuwe systemd systeem. Ik begrijp dat het grote verschil is dat systemd zich laat karakteriseren door, parallel opstarten van services, configuratie via configuratie files en een aantal geintegreerde services. In plaats van zoals bij sysvinit de losse services die via shell scripts een voor een opgestart worden. Een diepingevoerde Linux kenner zal er meer van weten. Maar wat me opvalt dat steeds meer services die je kende als service uit het 'oude' linux nu geintegreerd worden in het systemd systeem. Het brengt ook hevige discussies voort in de Linux gemeenschap. Erg interessant om zo nu en dan de discussies te lezen van de linux bouwers. Veel gefundeerde en ongefundeerde meningen, ontwikkelaar met hele grote ego's die elkaar ook nog de tent uitvechten. Wat lijkt dat het ongenoegen er is dat systemd eigenlijk de linux gemeenschap door de strot gedouwd wordt. En dat ook nog door een groep ontwikkelaars die zich ook laat kenmerken door grote arrogantie, maar wel gesteund door een grote, Red Hat. Maar dat idee heb ik wel met meer van die open source mannen, iedereen weet het en de een nog beter dan de ander. Maar het volgende plaatje vond ik erg grappig, het systemd wat steeds meer linux services inbouwt vs het sysvinit als systeem was losse services opstart.

http://twitpic.com/ea4bkl
Pagina: 1