PHP per Cron aufruf

Bash, Shell, PHP, Python, Perl, CGI
abrocker
Posts: 26
Joined: 2003-04-09 01:44

PHP per Cron aufruf

Post by abrocker »

Hi Leute!
Ich rufe ein script per Cron auf php /home/user/srcipt.php
dieses wird von der Shell wenn ich mich anmelde normal durchlaufen. Der Cron fabriziert folgende Ausgabe....was ist das?

Ausgabe des Befehls php /home/user/script.php ...

Content-type: text/html
X-Powered-By: PHP/4.3.1

# exec_cron.cgi
# Execute an existing cron job, and display the output

require './cron-lib.pl';
&ReadParse();

@jobs = &list_cron_jobs();
$job = $jobs[$in{'idx'}];
&can_edit_user(%access, $job->{'user'}) || &error($text{'exec_ecannot'});
&foreign_require("proc", "proc-lib.pl");

# split command into command and input
$job->{'command'} =~ s/\%//g;
@lines = split(/%/ , $job->{'command'});
foreach (@lines) { s//%/g; }
for($i=1; $i<@lines; $i++) {
$input .= $lines[$i]."n";
}

$| = 1;
$theme_no_table++;
&header($text{'exec_title'}, "");
print "<hr>n";
&additional_log('exec', undef, $lines[0]);
&webmin_log("exec", "cron", $job->{'user'}, $job);

# Remove variables that wouldn't be in the 'real' cron
foreach $e ('SERVER_PORT', 'GATEWAY_INTERFACE', 'WEBMIN_VAR', 'SERVER_ROOT',
'REMOTE_USER', 'SERVER_ADMIN', 'REQUEST_METHOD', 'REMOTE_HOST',
'REMOTE_ADDR', 'SERVER_SOFTWARE', 'PATH_TRANSLATED', 'QUERY_STRING',
'MINISERV_CONFIG', 'SERVER_NAME', 'SERVER_PROTOCOL', 'REQUEST_URI',
'DOCUMENT_ROOT', 'WEBMIN_CONFIG', 'SESSION_ID', 'PATH_INFO',
'BASE_REMOTE_USER') {
delete($ENV{$e});
}
foreach $e (keys %ENV) {
delete($ENV{$e}) if ($e =~ /^HTTP_/);
}

# Set cron environment variables
foreach $e (&read_envs($job->{'user'})) {
$ENV{$1} = $2 if ($e =~ /^(S+)s+(.*)$/);
}

# Get command and switch uid/gid
@uinfo = getpwnam($job->{'user'});
$ENV{"HOME"} = $uinfo[7];
$ENV{"SHELL"} = "/bin/sh";
$ENV{"LOGNAME"} = $ENV{"USER"} = $job->{'user'};
$( = $uinfo[3];
$) = "$uinfo[3] $uinfo[3]";
($>, $<) = ($uinfo[2], $uinfo[2]);

# Execute cron command and display output..
print &text('exec_cmd', "<tt>$lines[0]</tt>"),"<p>n";
print "<pre>";
$got = &foreign_call("proc", "safe_process_exec",
$lines[0], 0, 0, STDOUT, $input, 1);
print "<i>$text{'exec_none'}</i>n" if (!$got);
print "</pre>n";

print "<hr>n";
&footer("edit_cron.cgi?idx=$in{'idx'}", $text{'edit_return'},
"", $text{'index_return'});
Anonymous

Re: PHP per Cron aufruf

Post by Anonymous »

Er gibt Dein script aus, was soll er sonst tun?

Karlo
abrocker
Posts: 26
Joined: 2003-04-09 01:44

Re: PHP per Cron aufruf

Post by abrocker »

Er sollte es ausführen, weil wenn ich es von der Shell aus starte kommt nicht so ein ECHO.
gamecrash
Posts: 339
Joined: 2002-05-27 10:52

Re: PHP per Cron aufruf

Post by gamecrash »

Was erwartest Du, wenn Du ein Perlscript mit PHP ausführen willst??? Ich mein, woher soll PHP denn die Perl-Befehle kennen und ausführen?

Also entweder Du führst das mit Perl aus oder Du schreibst es mit PHP, so wirste aber ned viel weiter kommen ;)
debianfan
Posts: 165
Joined: 2002-08-17 18:40

Re: PHP per Cron aufruf

Post by debianfan »

Ich hab was gefunden - er meinte eigentlich sowas


0 * * * * /usr/local/bin/php /absoluter/pfad/zur/phpdatei.php >/dev/null

Sollte es aber so sein, dass nur die "Version mit --with-apxs" vorhanden ist (PHP als Apache Modul), würde man einen für die Kommandozeile geeigneten Browser (z.B. Lynx) verwenden, wodurch der "crontab"-Eintrag ungefähr so ausschaut.:

0 * * * * lynx --dump http://domain.tld/phpdatei.php >/dev/null
gamecrash
Posts: 339
Joined: 2002-05-27 10:52

Re: PHP per Cron aufruf

Post by gamecrash »

Nein, PHP funktioniert ja einwandfrei... er führt die Datei mit PHP aus. Nur ist es bei PHP (anders als bei Perl) eben so, dass nur Teile, die in ein <?php ?> eingeschlossen sind ausgeführt werden. Alles andere wird unbesehen zurückgegeben.

Er hat (weil das ja kein PHP-Script ist) kein solchen Blöcke drin, also wird alles einfach ausgegeben... erkennst Du auch an den zwei Headern, die PHP korrekt ausgibt...