1

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.

  • Its likely not the issue, but why "*/14" - that would seem unusual ? – davidgo Nov 2 '19 at 17:56
  • @davidgo That is just to execute to each 14 minutes. I put the real scenario, but didn't work with to each minute — * * * * * user command. – Leandro Arruda Nov 2 '19 at 18:00
  • That's bizarre. What file are you editing? (Also, */15 might be better as 60 mins in an hour, but running every minute should not give you problems if syntax is correct) – davidgo Nov 2 '19 at 18:05
  • @davego I need to query informix database before 15-30-45-59:99 minute of each hour. These samples is from crontab. I'm editing type crontab -e. The server has a lot of cron job running, but this others cron jobs was put it directly inside '/etc/cron.d', And has a lot of php scripts runnings as cron jobs. I tried to puts also at this path, but doesn't work, even to each minute of each hour. – Leandro Arruda Nov 2 '19 at 18:11
  • Are you root when you are editing them? Have you tried editing /etc/crontab directly (in /etc/crontab you specify the user who runs it, when running crontab -e I believe it edits the users crontab so you dont specify the user - and maybe the problem is its running with incorrect syntax or wrong user? – davidgo Nov 2 '19 at 20:51
0

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=<data_source_name> && export INFORMIXDIR=<path_to_informix_sdk> && export INFORMIXTMP=<path_infomix_tmp> && export INFORMIXSQLHOSTS=<path_to_sqlhost_file> && export $PATH:$INFORMIXDIR/bin && /usr/bin/php /opt/project/script.php &> /var/log/project/task.log

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.