Kategorien
Development

session_start(): ps_files_cleanup_dir: opendir(/var/lib/php5) failed

Diese Fehlermeldung kann unter Umständen bei PHP auf einem Ubuntu bzw. Debian System auftreten, wenn der sogenannte Session Garbage Collector aufgrund von falschen Berechtigungen nicht laufen konnte.

session_start(): ps_files_cleanup_dir: opendir(/var/lib/php5) failed: Permission denied (13)

Auf Ubuntu / Debian System sollte ein separater Cronjob vorhanden sein, der diese Aufgabe übernimmt.
Das Problem tritt beim einfachen starten einer Session über „session_start()“ auf. Hierfür gibt es zwei Lösungen, wobei die Zweite in meinen Augen die bessere Alternative ist.

Lösung 1 geht ganz schnell. Einfach ein „@“ vor session_start() und schon kommt der Fehler nicht mehr.

@session_start();

Lösung 2 benötigt Zugriff auf die PHP.ini des Servers.
Meistens liegen zwei PHP.ini-Dateien vor. Eine für Apache2 (/etc/php5/apache2) und eine für das CLI (/etc/php5/cli). In beiden Ordnern liegt eine PHP.ini. Einfach mit einem Editor öffnen und folgenden Wert von „1“ (standardmäßig) auf „0“ setzen.

session.gc_probability = 0

Danach den Apache neustarten bzw. -laden.

Kategorien
Development

Plesk 10: Cronjobs funktionieren nicht

Falls die über Plesk 10 definierten Cronjobs nicht funktionieren, könnte das an folgender Einstellung liegen. Zitat aus dem Plesk Handbuch:

If you trust your customers enough to allow execution of scripts in a non-chrooted environment, then you can select the required shell by issuing the following command in the console:

# /usr/local/psa/bin/server_pref -u -crontab-secure-shell "/bin/sh"

If you want to revert this setting and set again the default shell used by the system, issue the following command in the console:

# /usr/local/psa/bin/server_pref -u -crontab-secure-shell ""

Diese Shell-Befehle funktionieren unter Plesk 10.4

Quelle: Plesk 10 Administrator Guide

Kategorien
Development

[HOWTO] Das Fenster einer ausgeführten Batch-Datei verstecken (Cronjob)

Um das Fenster einer Batch-Datei zu verstecken bzw. um eine Batch Datei im Hintergrund auszuführen, benötigt man eine kleine VBScript Datei, die das Verstecken des Fensters übernimmt.
Eine Anwendungsfall hierfür wäre zum Beispiel das Ausführen eines Cronjobs auf einer lokalen PHP Entwicklungsumgebung mit einem „XAMPP-Server“.
Zunächst wird die Batch-Datei erstellt, die das PHP-Skript über die „php-win.exe“ des Servers aufruft. Ich nenne sie einfach mal „cron.bat“ mit folgendem Inhalt:

X:\[PFAD-ZUR-PHP-WIN.EXE]\php-win.exe X:\[PFAD-ZUR-PHP-DATEI-DIE-AUSGEFÜHRT-WERDEN-SOLL]\jobs.php

Als nächstes braucht man noch die VBScript Datei, um das Fenster der Batch-Datei zu verstecken. Ich nenne sie „hidden.vbs“ und der Inhalt sieht wie folgt aus:

CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False

Wenn man jetzt unter „START -> Ausführen“ folgendes eingibt, wird die Batch-Datei ausgeführt aber ohne, dass man ein Fenster sieht:

wscript.exe "X:\[PFAD-ZUR-HIDDEN.VBS]\hidden.vbs" "X:\[PFAD-ZUR-BATCH-DATEI]\cron.bat"

Diesen Befehl kann man jetzt zum Beispiel als „Geplante Task“ in Windows alle 5 Minuten ausführen lassen und erreicht dadurch eine in meinen Augen einfache Cronjob-Lösung für eine lokale Entwicklungsumgebung ohne zusätzliche Software.