Although I checked the canonical issue for cron, I couldn't solve the problem.
Why is my crontab not working, and how can I troubleshoot it?
So, here I go:
I have a php script that queries a MySQL and IBM Informix database (located in other host), generates json files, handles the information and inserts it into the MySQL database.
The script has a main file and another that has the query handling functions. Staying like this:
/opt/project
script.php
functions.php
The script.php requires the functions.php file, and gene
I can run the script smoothly using absolute or relative path.
Inside /opt/project:
# php script.php
Somewhere else:
# /usr/bin/php /opt/project/scrpt.php
However, when its executed by cron job, doesn't work. I did already set up informing environment variables, performed log tests, and even created a shell script to run script.php with cron running the shell script.
Server PATH (CentOS 7):
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/IBM/informix/bin
Crontab contents tried:
SHELL=/usr/local/bin
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/IBM/informix/bin
*/14 * * * * /usr/bin/php /opt/project/script.php
With root ahead command:
SHELL=/usr/local/bin
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/IBM/informix/bin
*/14 * * * * root /usr/bin/php /opt/project/script.php
Changing directory:
SHELL=/usr/local/bin
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/IBM/informix/bin
*/14 * * * * cd /opt/project && /usr/bin/php script.php
Cron to run shell script instead php directly:
SHELL=/usr/local/bin
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/IBM/informix/bin
*/14 * * * * cd /opt/project && sh run_script.sh
Where shell script has the following content:
#!/usr/bin/env bash
cd /opt/project
PHP=`which php`
$PHP script.php
The cron logs didn't show anything wrong, and if I redirect the output to a file it's create the file, but didn't run the php script, even by shell script to do that. I tried with not set SHELL and PATH in the crontab, but doesn't work too.
Answer
The problem was the variables of the SDK to connect with IBM Infomix database. Although I had set the PATH, it was necessary to export the environment variables from IBM Informix that I define when I did install the Informix SDK. The strange was that even with the PDO exeptions no one error was generate when I redirect error standard output with &>.
May exist an most elegant way to do that but I can't play with live environment. Follow that cron job that currently works:
SHELL=/usr/local/bin
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/IBM/informix/bin
14,29,44,59 * * * * root export INFORMIXSERVER= && export INFORMIXDIR= && export INFORMIXTMP= && export INFORMIXSQLHOSTS= && export $PATH:$INFORMIXDIR/bin && /usr/bin/php /opt/project/script.php &> /var/log/project/task.log
Comments
Post a Comment