Page 1 of 1

Event handler für "Web hosting service" updated - 9.2.3

Posted: 2010-02-22 22:34
by m.m.
Ich habe mein mod_fcgid Problem fast gelöst. Alles, war mir jetzt noch fehlt, ist ein Event Handler in Plesk (hier 9.2.3), der nach der Änderung von Web Hosting Settings (z.B. von FastCGI nach CGI) aufgerufen wird, damit ich hier ein bash Script starten kann, welches dann Änderungen an der jeweiligen httpd.include vornimmt.

Anscheinend finde ich trotz des Studiums von http://download1.parallels.com/Plesk/PP ... ion-guide/ nicht den richtigen Handler?!

Das muss Plesk doch draufhaben?!

Andernfalls überlege ich mir einen Weg, per Cron alle Domains die es gibt zu durchlaufen, und in regelmässigen Abständen dieses Script aufzurufen. #-o

Ich habe bisher folgende Events probiert:
Domain updated (eigentlich das Naheliegendste.....)
Physical Hosting updated

...und auch für eine Subdomain funktioniert das mit
Subdomain updated

leider nicht :-&

Funktioniert nicht heisst, ich kann nicht erkennen, dass das im Event Handler angegebene File ausgeführt wird (Priorität High (100) als user root). Das Script funktioniert beim Aufruf von Hand wunderbar. Ich nutze die Variable ${NEW_DOMAIN_NAME} im Script um den Pfad zur httpd.include anzugeben, z.B.

Code: Select all

sed -e 's/CustomLog.*//' -e 's/ErrorLog.*//' </srv/www/vhosts/${NEW_DOMAIN_NAME}/conf/httpd.include >httpd.include.neu
Sinn: Ich habe CustomLog und ErrorLog in das jeweilige vhost.conf geschrieben, u.a. um für Subdomains eigene Logfiles erstellen zu lassen.

Was mache ich also falsch (ok, ausser Plesk zu nutzen...)?

Danke im Voraus.

Re: Event handler für "Web hosting service" updated - 9.2.3

Posted: 2010-02-22 22:58
by Joe User
Dein sed löscht das jeweils erste Vorkommen von CustomLog beziehungsweise ErrorLog und darauf folgende Zeichen bis zum Zeilenende. Willst Du das wirklich?
Geht für GNU-sed auch eleganter:

Code: Select all

sed 's/\(CustomLog\|ErrorLog\).*//' -i /srv/www/vhosts/${NEW_DOMAIN_NAME}/conf/httpd.include

Re: Event handler für "Web hosting service" updated - 9.2.3

Posted: 2010-02-22 23:30
by m.m.
Danke für Deinen Tipp. Allerdings löscht sed hier _alle_ Vorkommen jeweils bis zum Zeilenende. Ich habe das gerade nochmal probiert:

Code: Select all

 # diff httpd.include httpd.include.org
19,20c19,20
<
<
---
>       CustomLog  /srv/www/vhosts/xxx/statistics/logs/access_ssl_log plesklog
>       ErrorLog  /srv/www/vhosts/xxx/statistics/logs/error_log
80,81c80,81
<
<
---
>       CustomLog  /srv/www/vhosts/xxx/statistics/logs/access_log plesklog
>       ErrorLog  /srv/www/vhosts/xxx/statistics/logs/error_log
133,134c133,134
<
<
---
>       CustomLog  /srv/www/vhosts/xxx/statistics/logs/access_ssl_log plesklog
>       ErrorLog  /srv/www/vhosts/xxx/statistics/logs/error_log
181,182c178,179
<
<
---
>       CustomLog  /srv/www/vhosts/xxx/statistics/logs/access_log plesklog
>       ErrorLog  /srv/www/vhosts/xxx/statistics/logs/error_log
aber ich schau mir das trotzdem nochmal an.


Ich möchte jedenfalls alle CustomLog und ErrorLog Zeilen aus der httpd.include entfernen, da ich die jeweiligen Einträge in der vhost.conf habe.

Re: Event handler für "Web hosting service" updated - 9.2.3

Posted: 2010-02-23 00:15
by Joe User
m.m. wrote:Ich möchte jedenfalls alle CustomLog und ErrorLog Zeilen aus der httpd.include entfernen, da ich die jeweiligen Einträge in der vhost.conf habe.
Dann sollte der sed so aussehen:

Code: Select all

sed '/^[[:space:]]*\(Custom\|Error\)Log.*$/d' -i /srv/www/vhosts/${NEW_DOMAIN_NAME}/conf/httpd.include
Bei Plesk selbst müssen Dir andere helfen, ich nutze soetwas nicht.

Re: Event handler für "Web hosting service" updated - 9.2.3

Posted: 2010-02-23 08:08
by m.m.
Hab ich übernommen =D>

Aber der Event Manager von Plesk.... ](*,)

Um es kurz zu machen: "Physical Hosting updated" ist der richtige Event. Allerdings reicht das Ändern von FastCGI Support auf CGI Support nicht aus um den Event zu triggern. Erst wenn man z.B. den PHP Support abstellt (oder umgekehrt), bekommt Plesk das anscheinend als Änderung mit und das Script wird ausgeführt. Ich habe das übrigens als

Code: Select all

/usr/local/bin/domain.sh <new_domain_name>
eingetragen und greife für sed die übergebene Domain mit $1 ab.

Danach mache ich im Script noch ein 'rcapache2 reload' und gut is.

Re: Event handler für "Web hosting service" updated - 9.2.3

Posted: 2010-02-23 14:03
by m.m.
grrr....

Anscheinend läuft ein cronjob, der alle paar Minuten

Code: Select all

/usr/local/psa/admin/websrvmng -a
aufruft. Jedenfalls sind nach kurzer Zeit alle CustomLog bzw ErrorLog Einträge wieder in der httpd.include drin :-(

@JoeUser
Hättest Du noch einen sed Tipp für mich, wenn ich vor jeden CustomLog bzw. ErrorLog Eintrag ein # setzen wollte?

Code: Select all

sed -e 's/^[[:space:]]*\(Custom\|Error\)Log.*$/#&/' -i /srv/www/vhosts/$1/conf/httpd.include
scheint nicht zu gehen. Davon abgesehen wäre es prima, wenn die Ersetzung nicht stattfindet, sofern schon ein # vor dem Eintrag steht. In

Code: Select all

^[[:space:]]*
müsste ich also das # von * ausschliessen.

Re: Event handler für "Web hosting service" updated - 9.2.3

Posted: 2010-02-23 14:21
by Joe User
m.m. wrote:Hättest Du noch einen sed Tipp für mich, wenn ich vor jeden CustomLog bzw. ErrorLog Eintrag ein # setzen wollte?

Code: Select all

sed -e 's/\(CustomLog\|ErrorLog\)/#\1/g' -i /srv/www/vhosts/$1/conf/httpd.include
m.m. wrote:Davon abgesehen wäre es prima, wenn die Ersetzung nicht stattfindet, sofern schon ein # vor dem Eintrag steht. In

Code: Select all

^[[:space:]]*
müsste ich also das # von * ausschliessen.
Das ist bereits der Fall, da der Stern nur für "belibig oft" steht, für "belibiges Zeichen" steht der Punkt ;)
Ansonsten einfach mal vorher und nachher Beispiele liefern, macht das Basteln einfacher 8)

http://sed.sourceforge.net/ insbesondere die SED-FAQs und die OneLiners sind sehr empfehlenswert.

Re: Event handler für "Web hosting service" updated - 9.2.3

Posted: 2010-02-23 20:07
by m.m.
<sigh>

Einmal Windoof, immer Windoof aber das mit dem * und . nagel ich mir jetzt an die Tapete.

So klappt es nun: domain.sh

Code: Select all

#!/bin/bash
#
#
##
# Wait 5 seconds for Plesk to finish
sleep 5

#
##
# Comment CustomLog and ErrorLog from httpd.include as these sit now in respective vhost.conf
sed 's/\(^[[:space:]]*\)\(CustomLog\|ErrorLog\)/\1#\2/g' -i /srv/www/vhosts/$1/conf/httpd.include

#
##
# Tell my admin how hard i have to work...
echo -e "Triggered domain.sh event handler for domain $1 at `date '+%d.%m.%Y %H:%M:%S'`" | logger
Aufgerufen wird der Event Handler mit:

Code: Select all

Event: Physical Hosting Updated
Priority: highest (100)
User: root
Command: /usr/local/bin/domain.sh <new_domain_name>
Schreibt jedesmal einen Eintrag ins Syslog (bei mir in /var/log/messages) wenn der Event ausgelöst wurde und der sed oben kommentiert die Zeile nur aus, falls noch nicht vorher geschehen (wobei sogar whitespaces erhalten bleiben - es wird nur ein # vor den Eintrag gesetzt).

Nun bin ich mal gespannt, ob Plesk daran auch wieder was ändert - zur Erinnerung: Als ich die komplette Zeile(n) gelöscht habe, waren die Einträge auf wundersame Weise plötzlich wieder in der Datei vorhanden. Welches Plesk Script das im Cron verursacht weiss ich (noch) nicht.

Danke für die Hilfe und den \(Denkanstoss\|Denkanstoß\) \. 8)

Edit:
Nachtrag: Ich habe das Script noch um ein 'sleep 5' ergänzt weil es sonst passieren kann, daß sed über httpd.include läuft bevor Plesk es überhaupt geschrieben hat. Wer sich also wundert warum sein Even Handler nicht funktioniert...

Re: Event handler für "Web hosting service" updated - 9.2.3

Posted: 2010-02-23 23:49
by m.m.
Da ist was dran und insofern ist meine Lösung auch nicht 0815-tauglich. Ich bin jedoch hier mein einziger Kunde. \:D/

Sobald mehr als eine Person Zugriff auf das Adminpanel hat, geht sowas sicherlich (irgendwann) schief (weil man eben nicht alle Situationen durch Handler abfangen kann - Murphy is überall). Es sei denn man nutzt cron (aber auch dann müsste man durch alle Domain Verzeichnisse gehen und dieser cronjob läuft auch nicht 'ständig'.....mit anderen Worten: viel Aufwand und 'room for error').

Der Auslöser für dieses ganze Bromborium hier war die Tatsache, daß ich für Subdomains ein eigenes access_log haben wollte. Nun, das lässt sich ja auch in einer eigenen vhost.conf sehr schön einrichten. Was allerdings nebenbei passiert ist, ist die Tatsache, daß Apache nun trotz des definierten CustomLog für die Subdomain in der vhost.conf immer noch den CustomLog Eintrag in der httpd.include 'sah' und einzelne Zugriffe auf der Subdomain daher in dem access_log der Domain auftauchten?! Und weil das mit Computern so viel Spass macht wenn ein Fehlverhalten unregelmässig auftaucht....

Frag mich warum, ich weiss es nicht. Was ich allerdings weiss ist, daß der Spuk aufgehört hat, nachdem ich im entsprechenden Virtualhost Container in der httpd.include den CustomLog Eintrag gelöscht/auskommentiert habe. Seither stehen alle Zugriffe ausschliesslich im access_log der jeweiligen Subdomain.

Darf ich Dich fragen
1. ob und wenn ja welches Adminpanel Du nun einsetzt und
2. wer uns in Zukunft nun mit so wertvollen Plesk Scripten versorgen soll?

(ok, 2. ist nicht ganz soo bierernst gemeint).