Waarom wil dit script niet in de crontab werken?

Pagina: 1
Acties:

  • Nitroglycerine
  • Registratie: Januari 2002
  • Laatst online: 12:48

Nitroglycerine

Autisme: belemmering en kracht

Topicstarter
Op een UNIX-server ben ik bezig een script te ontwikkelen welk eprintjobs ouder dan x dagen verwijderd, met de eventueel bijbehorende processen.

In het script, wat ik trouwens met de ksh-shell draai, gebruik ik de volgende do-while routine:

lpstat -o | while read JOBID USERID GROOTTE MAAND DAG TIJD REST
do

......

done

Indien ik het script zelf draai vanuit de shell, doet ie het prima. Maar zet ik het in de crontab, komt hij de gehele do-loop niet eens in.
Komt dit misschien omdat lpstat -o formatted output geeft (net zoals het ps commando, waardoor je ps -ef in de crontab niet kunt gebruiken maar ps -eopid,args wel)? Is hier dan een andere oplossing voor te vinden? In /var/spool/lp/requests/<node>/ staan de bestanden zelf, maar die zijn volgens mij niet goed bruikbaar (access/modificatie tjden e.d.)

Hier kon uw advertentie staan


  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 16-05 20:47

Super_ik

haklust!

absolute paths gebruiken?

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • Wilke
  • Registratie: December 2000
  • Laatst online: 13:19
Script beginnen met #!/bin/[ba]sh ?

  • Nitroglycerine
  • Registratie: Januari 2002
  • Laatst online: 12:48

Nitroglycerine

Autisme: belemmering en kracht

Topicstarter
voor de logfile (het enige bestand dat ik gebruik) gebruik ik de absolute paden. in de crontab staan ook de absolute paden. Het wordt aangeroepen, zie de logfile verschijnen, maar er wordt niets uitgevoerd.

Hier kon uw advertentie staan


  • Nitroglycerine
  • Registratie: Januari 2002
  • Laatst online: 12:48

Nitroglycerine

Autisme: belemmering en kracht

Topicstarter
dit is het begin:

#!/usr/bin/ksh

dit moet gebruikt worden in onze UNIX-omgeving
uniformiteit in scripts e.d.

Hier kon uw advertentie staan


Verwijderd

de $PATH variabele van je crontab deamon (ik meen het zelfde als de root user) heeft niet de directory in zich die jou programmatje bevat. Probeer inderdaad met absolute paths te werken of:

export PATH="$PATH:<jouw dir>" in je script te zetten

ciao

  • Nitroglycerine
  • Registratie: Januari 2002
  • Laatst online: 12:48

Nitroglycerine

Autisme: belemmering en kracht

Topicstarter
crontab entry:

0 3 * * 1 /sbeheer/local/printjobs


in het script zelf:
LOGFILE="/sbeheer/log/printjob/${DATUM}"

De logfile wordt gevuld met de eerste regel, maar de do-while loop pakt hij niet (zoals ik in eerdere post ook aangaf.

Hier kon uw advertentie staan


Verwijderd

Word het misscihen duidelijker als je 'set -x' gebruikt in je script?

  • Nitroglycerine
  • Registratie: Januari 2002
  • Laatst online: 12:48

Nitroglycerine

Autisme: belemmering en kracht

Topicstarter
In de crontab zelf?

Jongens: het script werkt! Het werkt als ik het vanuit de shell zelf opstart.
Maar als ik het in de crontab schedule, wordt het aangeroepen, verschijnt de eerste regel in de logfile, maar meer ook niet!

Voor de volledigheid: het script
#!/usr/bin/ksh
##############################################################
#
# Dit script schoont printopdrachten, die 4 dagen of ouder zijn.
##############################################################
# JvG | 19-11-02 | Versie 0.1
# | |
##############################################################
#

#set -xv
# Opbouwen van de datum en controledatum. Dit om de job-datum te kunnen vergelijken
DATUM="$(date +%Y%m%d)"
CONTROLEDATUM="$(datum.pl -4)"
HUIDIGEMAAND="$(date +%m)"
case ${HUIDIGEMAAND} in
1|2|3|4|5|6|7|8|9) HUIDIGEMAAND="0"${HUIDIGEMAAND}
;;
*) echo "" > /dev/null 2>&1
;;
esac
HUIDIGJAAR="$(date +%Y)"
MOEDERJOBID="0"

# Definiering van de diverse bestandsvariabelen
LOGFILE="/sbeheer/log/printjobs/${DATUM}"

echo "" > ${LOGFILE}

lpstat -o | while read JOBID USER GROOTTE MAAND DAG TIJD REST
do
case ${MAAND} in
Jan) MAANDNR="01"
;;
Feb) MAANDNR="02"
;;
Mar) MAANDNR="03"
;;
Apr) MAANDNR="04"
;;
May) MAANDNR="05"
;;
Jun) MAANDNR="06"
;;
Jul) MAANDNR="07"
;;
Aug) MAANDNR="08"
;;
Sep) MAANDNR="09"
;;
Oct) MAANDNR="10"
;;
Nov) MAANDNR="11"
;;
Dec) MAANDNR="12"
;;
*) MAANDNR="00"
;;
esac
case ${DAG} in
1|2|3|4|5|6|7|8|9) DAGNR="0"${DAG}
;;
*) DAGNR="${DAG}"
;;
esac
if [ "${MAANDNR}" -gt "${HUIDIGEMAAND}" ]
then
JAARNR=`expr ${HUIDIGJAAR} - 1`
else
JAARNR=${HUIDIGJAAR}
fi
JOBDATUM="${JAARNR}${MAANDNR}${DAGNR}"
if [ "${JOBDATUM}" -le "${CONTROLEDATUM}" ]
then
# jobdatum is ouder dan 3 dagen, mag verwijderd worden.
MOEDERJOBID=$(ps -eopid,args | grep "${JOBID}" | grep -v grep | awk '{print $1}')
if [ "${MOEDERJOBID}" != "" ]
then
if [ "${MOEDERJOBID}" != "0" ]
then
KINDJOBID=$(ps -eopid,ppid | awk -v pid=${MOEDERJOBID} '{if($2 == pid) print $1}')
if [ "${KINDJOBID}" != "" ]
then
if [ "${KINDJOBID}" != "1" ]
then
kill -9 ${MOEDERJOBID} ${KINDJOBID}
else
kill -9 ${MOEDERJOBID}
fi
else
kill -9 ${MOEDERJOBID}
fi
fi
fi
cancel ${JOBID}
echo Printopdracht ${JOBID} van datum ${JOBDATUM} verwijderd. >> ${LOGFILE}
fi
MOEDERJOBID=""
KINDJOBID=""
done

Hier kon uw advertentie staan


  • Nitroglycerine
  • Registratie: Januari 2002
  • Laatst online: 12:48

Nitroglycerine

Autisme: belemmering en kracht

Topicstarter
De layout van lpstat -o is:

jobid usernaam filegrootte maand dag tijd <printmelding>

omdat er geen jaartallen in de layout staan, en de dag zonder voorloopnul weergegeven wordt, en ik het voor de datumvergelijking het in de syntax yyyymmdd moet hebben, moet ik de omslachtige bovenstaande methode gebruiken.

Hier kon uw advertentie staan


Verwijderd

Haal het hekje voor de set -xv eens weg en modify de crontab regel als volgt:

0 3 * * 1 /sbeheer/local/printjobs >/tmp/myjob.log 2>&1

Die output eens bekijken of hier posten.. Kunnen we direct zien waar het evt. fout gaat zonder het hele script door te hoefen fietsen..

  • Nitroglycerine
  • Registratie: Januari 2002
  • Laatst online: 12:48

Nitroglycerine

Autisme: belemmering en kracht

Topicstarter
om 13:22 wordt het gedraait

Hier kon uw advertentie staan


  • Nitroglycerine
  • Registratie: Januari 2002
  • Laatst online: 12:48

Nitroglycerine

Autisme: belemmering en kracht

Topicstarter
UX:ksh: ERROR: datum.pl: not found

daar had ik niet gaan gedacht.
maak er effe een absoluut path van - m'n collega had me verzekerd dat het ten alle tijden te draaien was, dat hij het ook altijd zo in zijn scripts aanroept.

Wil zijn scripts dan wel eens zien :)

Hier kon uw advertentie staan

Pagina: 1