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.
Shellscript über MySQL-Trigger aufrufen
Re: Shellscript über MySQL-Trigger aufrufen
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.
Nun gut, dann lasse ich eben einen Cronjob regelmäßig über die Datenbank laufen.
Re: Shellscript über MySQL-Trigger aufrufen
Und, wie Du im ersten Post geschrieben hast, beim MS-SQL ;) SCNR3DMax wrote:dass das nur beim "Weltmarktführer" möglich ist,
Re: Shellscript über MySQL-Trigger aufrufen
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:
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...
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 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...
Re: Shellscript über MySQL-Trigger aufrufen
Nein, das ist nicht möglich, weil dumm. Wenn Du Deinen Server gerootet haben willst, dann bitte mit einer anderen Backdoor.3DMax wrote:Ist es möglich, über einen Trigger oder Stored Procedure ein Shellscript zu starten?
Wenn ja, wie, wenn nein warum nicht? ;)
Re: Shellscript über MySQL-Trigger aufrufen
Immerhin nicht "unsicher", aber schlau ist das auch nicht. Eine Datenbank ist für Daten, nicht für das Gescripte.gierig wrote:du erstellst also quasi die Komplette Mail fix und fertig in der Datenbank...
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.
Re: Shellscript über MySQL-Trigger aufrufen
@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
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.
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
ja, so ähnlich habe ich es jetzt auch (habe noch eine spalte timestamp eingefügt).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
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.