问题
I have a PHP script that is being called every minute by crontab like this:
* * * * * /usr/bin/php /var/www/html/cronjobs/watchdog/watchdogExec.php
The script executes a number of other PHP scripts and passes a variable like so:
$ccmd = "nohup sudo /usr/bin/php watchdog.php " . $var . " &";
exec($ccmd);
When called from a browser, watchdogExec.php runs fine and does its job. However when I added the cronjob, the script is not working and is spamming mails with the following error:
No entry for terminal type "unknown";
using dumb terminal settings.
This error appears the same number of times exec()
is called, so I figured that must be the issue. I searched and read about cronjob not running commands in a terminal, and I tried setting the environment in the crontask, but it did not help. Apparently PHP is printing that error, but I haven't found anything in their documentation about it.
* * * * * /usr/bin/env TERM=xterm /usr/bin/php /var/www/html/cronjobs/watchdog/watchdogExec.php
I am running CentOS 7.
Edit:
Searched some more and found out about PHP environment variables. Someone fixed a similar problem by adding the following in their PHP script. However this is not fixing my problem, it only stops the mail spam. The script is still not working.
putenv('SHELL=/bin/bash');
putenv('TERM=xterm');
回答1:
Have you tried using full paths in your exec statement too? Also try adding the TERM environment variable:
$ccmd = "nohup /usr/bin/sudo /usr/bin/env TERM=xterm /usr/bin/php watchdog.php " . $var . " &";
回答2:
I do this with a 'shell script wrapper'. I add a file phpcron.sh
with
#!/bin/bash
php -f filename.php
and add this to crontab.
* * * * * /var/www/phpcron.sh
来源:https://stackoverflow.com/questions/35054223/php-exec-doesnt-work-if-run-by-cron