Cron mkdir und chmod Problem
Problem mit mkdir und chmod in einem cronjob: No such file or directory in /var/www/vhosts/domain.tld/httpdocs/cron_fcam03.php on line xx
Hallo,
wieder einmal brauch eich eure Hilfe !!!
Auf einem VServer (Hosteurope) unter Centos6 mit Plesk 11 werden von einer Kamera regelmäßig Bilder auf den Server gespeichert. Diese Bilder können sich Leute mit Berechtigung in einer Übersicht als Thumbnails anschauen.
Nun dauert aber das Erzeugen der Thumbnails einige Zeit, sodaß es durchaus bei Berechnung während der Anfrage zu längeren Wartezeiten oder timeouts kommen kann. Daher wollte ich ein Script per cron alle 10 Minuten laufen lassen.
Soweit so gut, manuell aufgerufen klappt das Script perfekt, leider als cronjob harkt es und ich weiss nicht mehr weiter:
Aufruf über "php /var/www/vhosts/domain.tld/httpdocs/cron_fcam03.php" (in Plesk 11 klappt das nur per Zugang zum Server via SSH: bin/bash) bekomme ich per Email(zum testen!) die Fehlermeldung:
Die Verzeichnisse stimmen aber, auch die Berechtigungen passen (0755). Scheint also, daß die Befehle mkdir und chmod nicht zugänglich sind.
Das PHP Script sieht so aus:
Wie gesagt, per Browser aufgerufen (domain.tld/cronjob.php) lauft es perfekt, als cronljob gibt es obige Fehlermeldung, und den Job macht keiner....
Hat jemand eine Idee woranes liegt?
Lg, Chris
Hallo,
wieder einmal brauch eich eure Hilfe !!!
Auf einem VServer (Hosteurope) unter Centos6 mit Plesk 11 werden von einer Kamera regelmäßig Bilder auf den Server gespeichert. Diese Bilder können sich Leute mit Berechtigung in einer Übersicht als Thumbnails anschauen.
Nun dauert aber das Erzeugen der Thumbnails einige Zeit, sodaß es durchaus bei Berechnung während der Anfrage zu längeren Wartezeiten oder timeouts kommen kann. Daher wollte ich ein Script per cron alle 10 Minuten laufen lassen.
Soweit so gut, manuell aufgerufen klappt das Script perfekt, leider als cronjob harkt es und ich weiss nicht mehr weiter:
Aufruf über "php /var/www/vhosts/domain.tld/httpdocs/cron_fcam03.php" (in Plesk 11 klappt das nur per Zugang zum Server via SSH: bin/bash) bekomme ich per Email(zum testen!) die Fehlermeldung:
PHP Warning: mkdir(): No such file or directory in /var/www/vhosts/f-cam.at/httpdocs/cron_fcam03.php on line 38 PHP Warning: chmod(): No such file or directory in /var/www/vhosts/f-cam.at/httpdocs/cron_fcam03.php on line 39 PHP Warning: mkdir(): No such file or directory in /var/www/vhosts/f-cam.at/httpdocs/cron_fcam03.php on line 42 PHP Warning: chmod(): No such file or directory in /var/www/vhosts/f-cam.at/httpdocs/cron_fcam03.php on line 43
Das PHP Script sieht so aus:
<?php
// CRONJOB BUILDING THUMBS EVERY 10 MINUTES
// set cam to be supported
$baustellen = array('fahrnercam03');
$thumb_width = 200;
$thumb_height = 150;
$thumb_quality = 75;
date_default_timezone_set('Europe/Berlin');
function create_thumb($source='', $destination='', $width=200, $height=150, $quality=75) {
// create thumbnail pic and store it in destination file
if (!$source) die ('<b>EROR CREATING THUMBNAIL:</b> No source file given.');
if (!$destination) die ('<b>EROR CREATING THUMBNAIL:</b> No destination path given.');
$size = getimagesize($source); // get orig size and filetype
if ($size[2] == 1) $img = imagecreatefromgif($source); // image is a gif
if ($size[2] == 2) $img = imagecreatefromjpeg($source); // image is a jpg
$new_img = imagecreatetruecolor($width, $height);
imagecopyresampled($new_img, $img, 0, 0, 0, 0, (int)$width, (int)$height, $size, $size[1]);
imagedestroy($img);
$result = imagejpeg($new_img, $destination, (int)$quality);
imagedestroy($new_img);
if ($result) return true;
return false;
}
define ('DIR_FS', $_SERVER['DOCUMENT_ROOT'].'/'); // define base dir. It is the directory in which this file is located
//$date = ($_GET['date']) ? trim($_GET['date']): date(Y-m-d) ;
$date = '2013-04-08'; // zum testen
$baustelle = $baustellen;
$camdir = DIR_FS.$baustelle.'/archiv/';
$sourcedir = $camdir.$date;
$thumbsdir = $sourcedir.'/thumbs';
// prüfe ob ordner FS/baustelle/archiv/datum existiert
if (!is_dir($sourcedir)) mkdir($sourcedir, 0755);
if (!is_writable($sourcedir)) chmod($sourcedir, 0755);
// prüfe ob ordner FS/baustelle/archiv/datum/thumbs existiert
if (!is_dir($thumbsdir)) mkdir($thumbsdir, 0755);
if (!is_writable($thumbsdir)) chmod($thumbsdir, 0755);
$pics = glob($sourcedir.'/'.'*.jpg'); // lese pics ein
if ($pics) {
foreach ($pics as $k => $orig_pic) {
$pic = str_ireplace($sourcedir.'/', '', $orig_pic);
if (!file_exists($thumbsdir.'/'.$pic)) create_thumb($orig_pic, $thumbsdir.'/'.$pic, $thumb_width, $thumb_height, $thumb_quality);
}
}
?>
Hat jemand eine Idee woranes liegt?
Lg, Chris
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 204660
Url: https://administrator.de/contentid/204660
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
3 Kommentare
Neuester Kommentar
Guten Morgen,
Dann bitte auch noch Wie kann ich einen Beitrag als gelöst markieren? nicht vergessen ...
@zanko
Dann bitte auch noch Wie kann ich einen Beitrag als gelöst markieren? nicht vergessen ...
Lg, Chris
Gruß@zanko
Auch wenn du dir bereits einen Workaround gebaut hast und das Problem nicht mehr aktuell ist, trotzdem noch meinen Senf dazu:
Ich glaube das Problem liegt in Zeile 28.
Du baust dir deine gesammten Dateinamen aus der Variable $_SERVER['DOCUMENT_ROOT'], das kann nur funktionieren, wenn die Variable auch gesetzt ist.
Beim Aufruf über den Webserver ist wird die Variable auf das Root-Verzeichniss gesetzt, aber nicht wenn du PHP direkt von der Kommandozeile, oder eben per Cron, aufrufst. (Woher soll der PHP-Interpreter auch wissen, wo der Webserver seine Dateien hat).
Verwende einfach fest definierte Pfade und es geht auch mit dem Cron.
Ich glaube das Problem liegt in Zeile 28.
Du baust dir deine gesammten Dateinamen aus der Variable $_SERVER['DOCUMENT_ROOT'], das kann nur funktionieren, wenn die Variable auch gesetzt ist.
Beim Aufruf über den Webserver ist wird die Variable auf das Root-Verzeichniss gesetzt, aber nicht wenn du PHP direkt von der Kommandozeile, oder eben per Cron, aufrufst. (Woher soll der PHP-Interpreter auch wissen, wo der Webserver seine Dateien hat).
Verwende einfach fest definierte Pfade und es geht auch mit dem Cron.