Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Cron/Bash] database query output mailen via cron job.

Pagina: 1
Acties:

  • Skyaero
  • Registratie: Juli 2005
  • Niet online
Dag allen,

ik probeer een door een cronjob aangeroepen bash script te maken die een query op een database loslaat en deze naar een email adres mailt. Daarvoor heb ik de volgende code geschreven:

code:
1
2
3
4
5
6
7
(
  source '/root/db.cfg'
  echo To: bug@me.not
  echo From: info@spammer.com
  echo Subject: EMAILTITLE
  /usr/bin/mysql -s -uroot -p$dbpwd myDatabase -e 'SELECT * FROM table WHERE 1;'
) | /usr/sbin/sendmail -t


Deze code werkt wel wanneer ik deze als shell user aanroep. Ik krijg dan een email met de juiste entries uit de database. Als het script door de cronjob wordt aangeroepen, krijg ik wel een email, maar staan hier niet de database entries in.

Ik heb een soortgelijke script draaien voor logbestanden,. waarin regel 6 vervangen is door de volgende code:
code:
1
  cat /var/log/apache2/error.log   | grep "$(date -d '1 day ago' "+%b %d")"

En dit werkt prima.

Ik weet dat een cronjob en shell user niet geheel gelijk zijn. Zo moet je in een cronjob volledige paden gebruiken. Maar ik begrijp niet wat een cronjob anders met een database output zou doen dan een shell user. Iemand een idee?

  • nightwing
  • Registratie: Maart 2002
  • Laatst online: 16-11 16:39
Check de mail van de user die de cron uitvoerd, mogelijk dat daar een foutmelding in staat. Verder kun je boven aan de crontab : MAILTO="email@domein.tld" zetten, dan krijg je per email op een zinniger email adres (niet in het script, maar in de crontab zelf).

Verder kun je ook .my.cnf (let op de punt voor het bestand) in de home van root zetten met username en password zodat deze automagisch bij mysql commando's oppakt.
Dit is de inhoud.
code:
1
2
3
[client]
user=root
password=password


Verder gebruik ik mysql in crons altijd als volgend (met .my.cnf bovenaan in gedachte) :
code:
1
echo "select * from table;" | mysql myDatabase

[ Voor 13% gewijzigd door nightwing op 07-09-2014 10:31 ]


  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 21:32
Weet je zeker dat het pad klopt? Draai eens
which mysql

Zie ook deze thread: http://stackoverflow.com/...l-to-execute-shell-script

[ Voor 10% gewijzigd door ThinkPad op 07-09-2014 10:37 ]


  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:29
Als welke gebruiker run jij die crontab? Is die anders dan de gebruiker waarmee je het script vanaf de shell runt? In dat geval zou het kunnen dat de file '/root/db.cfg' niet toegankelijk is voor de cron gebruiker.

  • Skyaero
  • Registratie: Juli 2005
  • Niet online
nightwing schreef op zondag 07 september 2014 @ 10:29:
Check de mail van de user die de cron uitvoerd, mogelijk dat daar een foutmelding in staat. Verder kun je boven aan de crontab : MAILTO="email@domein.tld" zetten, dan krijg je per email op een zinniger email adres (niet in het script, maar in de crontab zelf).
Kan dit ook per cronjob? Ik heb er namelijk nogal wat draaien en wil niet dat van alles een email wordt gestuurd.
Verder kun je ook .my.cnf (let op de punt voor het bestand) in de home van root zetten met username en password zodat deze automagisch bij mysql commando's oppakt.
Dit is de inhoud.
code:
1
2
3
[client]
user=root
password=password
Ik wist niet dat dit ook met cronjobs kon, dacht dat het alleen voor de shell root user was. Het grappige is, dat dit dus ook mijn probleem heeft verholpen. Kennelijk ging er in de cronjob dus iets niet goed met het lezen van db.cfg.

Dank je voor de snelle response.

  • nightwing
  • Registratie: Maart 2002
  • Laatst online: 16-11 16:39
Skyaero schreef op zondag 07 september 2014 @ 11:30:
[...]

Kan dit ook per cronjob? Ik heb er namelijk nogal wat draaien en wil niet dat van alles een email wordt gestuurd.
Jups, boven elke cronjob kun je die variable zetten. en je kan hem resetten naar de default (user mail) via
code:
1
MAILTO=""
Skyaero schreef op zondag 07 september 2014 @ 11:30:
[...]

Ik wist niet dat dit ook met cronjobs kon, dacht dat het alleen voor de shell root user was. Het grappige is, dat dit dus ook mijn probleem heeft verholpen. Kennelijk ging er in de cronjob dus iets niet goed met het lezen van db.cfg.

Dank je voor de snelle response.
np
Pagina: 1