Shellscript über MySQL-Trigger aufrufen

3dmax
Posts: 15
Joined: 2007-04-27 20:33

Shellscript über MySQL-Trigger aufrufen

Post by 3dmax »

Hi Leute,

mein Anliegen steht ja schon im Betreff, trotzdem nochmal eine kurze Erläuterung.

In MySQL5 besteht ja die Möglichkeit Trigger anzulegen, um auf bestimmte Inserts zu reagieren. Ich möchte, wenn ein bestimmter Datensatz in einer bestimmten Tabelle eingefügt wird, eine E-Mail versenden. Das Versenden der E-Mail wollte ich über ein Shellscript realisieren.

Ist es möglich, über einen Trigger oder Stored Procedure ein Shellscript zu starten?
Wenn ja, wie, wenn nein warum nicht? ;)

Beim MS SQL-Server ist es z.B. über xp_cmdshell möglich.
Top

3dmax
Posts: 15
Joined: 2007-04-27 20:33

Re: Shellscript über MySQL-Trigger aufrufen

Post by 3dmax »

Hm, aufgrund der Resonanz hier im Forum und meinen Ergebnissen beim "Googeln" gehe ich mal davon aus, dass das nur beim "Weltmarktführer" möglich ist, schade eigentlich.

Nun gut, dann lasse ich eben einen Cronjob regelmäßig über die Datenbank laufen.
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Shellscript über MySQL-Trigger aufrufen

Post by Joe User »

3DMax wrote:dass das nur beim "Weltmarktführer" möglich ist,

Und, wie Du im ersten Post geschrieben hast, beim MS-SQL ;) SCNR
Top

gierig
Posts: 286
Joined: 2002-10-15 16:59
Location: WHV

Re: Shellscript über MySQL-Trigger aufrufen

Post by gierig »

Ich schau mir grade das ganze Trigger gefraffel an in mySql.

Ne Direkte lösung gibt es nicht....

ABER:
http://forums.mysql.com/read.php?99,336 ... msg-170562

im Prinzip erstellst du dir nen Trigger in der Art:

Code: Select all

CREATE TRIGGER sometable_after_update AFTER UPDATE ON some_table FOR EACH ROW BEGIN
  SELECT  concat("To: ",NEW.mail),
          "From: triggers@mysql",
          concat("Subject: ",NEW.subject),
          "",
          NEW.body
  INTO OUTFILE "/inetpub/mailroot/pickup/mail.txt"
  FIELDS TERMINATED by 'rn';
END;|


das kommt ins Pickupverzeichnis vom Mailer....
Das sollte dann so funktionieren (wenn der Mail das Unterstützt und so eingestellt ist)....
Konnte ich aber aus zeit mangel noch nicht testen.




du erstellst also quasi die Komplette Mail fix und fertig in der Datenbank...
Top

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: Shellscript über MySQL-Trigger aufrufen

Post by isotopp »

3DMax wrote:Ist es möglich, über einen Trigger oder Stored Procedure ein Shellscript zu starten?
Wenn ja, wie, wenn nein warum nicht? ;)


Nein, das ist nicht möglich, weil dumm. Wenn Du Deinen Server gerootet haben willst, dann bitte mit einer anderen Backdoor.
Top

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: Shellscript über MySQL-Trigger aufrufen

Post by isotopp »

gierig wrote:du erstellst also quasi die Komplette Mail fix und fertig in der Datenbank...


Immerhin nicht "unsicher", aber schlau ist das auch nicht. Eine Datenbank ist für Daten, nicht für das Gescripte.

Wenn Du willst, kannst Du die Daten in eine Queue schieben ("Create table q ( id, createtime, from, to, subject, body ); insert into q value s( ... )") und dann ein Script schreiben, das die Dinger lockt, rauspopelt und abräumt ("begin; select * from q order by createtime limit 10 for update;", mails senden, "delete from q where id in ( ...); commit").

Das verteilt die Load auf Komponenten, die der Aufgabe angemessen sind und läßt sich auch später schlau skalieren.
Top

3dmax
Posts: 15
Joined: 2007-04-27 20:33

Re: Shellscript über MySQL-Trigger aufrufen

Post by 3dmax »

@gierig, danke für die tolle info, klingt sehr interessant.

hab's jetzt aber schon per script + cronjob gelöst, weil ich dachte, es antwortet niemand mehr. mal sehen, vielleicht baue ich es noch um.

@isotopp
Eine Datenbank ist für Daten, nicht für das Gescripte

Wenn Du willst, kannst Du die Daten in eine Queue schieben ... und dann ein Script schreiben, das die Dinger lockt, rauspopelt und abräumt

ja, so ähnlich habe ich es jetzt auch (habe noch eine spalte timestamp eingefügt).
nachteil ist, das die email nicht in "echtzeit" versendet wird, sondern dann, wenn der cronjob läuft.
gut, den könnte man jetzt jede minute laufen lassen, das ist aber auch nicht so toll.
Top