问题描述:

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');

网友答案:

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 . " &";
网友答案:

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
相关阅读:
Top