Toon posts:

[bash] script vanuit cron werkt niet ok

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een klein scriptje gemaakt in BASH om te checken of Postifx draait of niet. Veel ervaring in BASH heb ik niet, maar wat ik gemaakt heb werkt ongeveer zoals ik wil. Wanneer ik het script handmatig uitvoer werkt het helemaal goed.
code:
1
2
3
4
5
6
7
8
9
10
#!/bin/bash

PROCESS="/usr/libexec/postfix/master"

pidno=$(pidof "$PROCESS")
if [ -z "$pidno" ]
then
  /etc/init.d/postfix start
  exit
fi
Nu is het de bedoeling dat dit scriptje vanuit de cron wordt gestart. Wanneer de cron dit script aanroept wordt postfix altijd opnieuw opgestart, althans dat probeert ie. Hij matcht dus niet aan het if statement uit het script.

in de mail log verschijnt de volgende melding, wat inhoudt dat het script niet goed werkt.
code:
1
Jan 19 12:00:00 s023 postfix/postfix-script: fatal: the Postfix mail system is already running
De server waar het om gaat is een Red Hat Enterprise Linux ES release 3. Heb het script ook nog vanuit de cron op een Debian machine getest en hierop werkt het wel.

Enig idee waarom die if niet werkt vanuit cron? Die errormessages in de log richten geen schade aan, maar ik heb ze toch liever niet :)

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Moet je niet doen:

pidno=`pidof /usr/libexec/postfix/master` ?

Ik weet niet precies hoe bash exact werkt, maar ik weet wel dat backticks werken om een output in een var te krijgen. Jouw manier is mij onbekend.

  • Wilke
  • Registratie: December 2000
  • Laatst online: 19:41
Hmm, werkt het opgeven van het volledige pad wel dan?

Als ik hier probeer:

code:
1
2
3
4
$ pidof "apache2"
[lijstje met pids]
$ pidof "/usr/sbin/apache2"
[lege string]


En ja, apache2 staat in /usr/sbin blijkbaar (dat is iig wat 'ps' zegt).
'man pidof' zegt:
When pidof is invoked with a full pathname to the program it should
find the pid of, it is reasonably safe. Otherwise it is possible that
it returns pids of running programs that happen to have the same name
as the program you're after but are actually other programs.
Hmm, vreemd.

Edit: Ah! Gevonden. Het ligt aan de user waaronder het draait. Als ik bovenstaande als root probeer werkt het wel zoals verwacht.

Als user: zie boven
Als root:

code:
1
2
3
4
# pidof "apache2"
[lijstje met pids]
# pidof "/usr/sbin/apache2"
[zelfde lijstje met pids]


Kortom, cron draait het script niet als root, en daardoor wil 'pidof' blijkbaar niet de id's geven van processen die niet onder hetzelfde user-id draaien.

[ Voor 69% gewijzigd door Wilke op 19-01-2005 12:55 ]


  • dajappie
  • Registratie: Januari 2005
  • Laatst online: 20:29
Je kan je services ook monitoren met daemontools, check voor de combinatie met Postfix http://www.dt.e-technik.u.../postfix/daemontools.html. Scheelt weer wat zelfbouwprobleempjes.

Verwijderd

Topicstarter
Wilke, thanks, heb in mijn script pidof vervangen door /sbin/pidof en nu pakt ie hem wel.

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Osiris schreef op woensdag 19 januari 2005 @ 12:42:
Ik weet niet precies hoe bash exact werkt, maar ik weet wel dat backticks werken om een output in een var te krijgen. Jouw manier is mij onbekend.
`iets` en $(iets) doen precies hetzelfde.

"He took a duck in the face at two hundred and fifty knots."

Pagina: 1