4

I am wanting to add a section in my php application to add / remove scheduled tasks.

Something similar to what they use in vBulletin Forum.

Does anyone have any ideas what they use? Are they using cron jobs or do they have something custom done.

Can anyone guide me on how I can accomplish something similar to that, basically I just want my script to add or remove cron jobs / scheduled task.

I don't want to use, for example the cPanel Cron interface, I would like to accomplish this from within my script.

Any help is greatly appreciated.

tplaner
  • 7,975
  • 3
  • 27
  • 46
Zubair1
  • 2,660
  • 2
  • 27
  • 37

5 Answers5

12

If you don't have the exec() function enabled, you have to rely on manually setting at least one cron job via some interface and then managing individual jobs in your script.

What I do for example is this

  1. I have a script heartbeat.php which is executed every minute
  2. This script checks a MySQL table crontab and checks if there is any row (job) with time_to_process <= NOW()
  3. If there is, it loads the class defined for the specific row from crontab table
  4. The class implements an interface with run() method and I only call $cronJob->run() to make it run
  5. The class then handles it's rescheduling via crontab table once it finishes

A good example is to reset daily views on some items. The job is scheduled at May 1, 2010 00:00. Once the job ran, it schedules itself for the next day automatically.
You can then implement automatic reset of failed jobs and many other features from within PHP.

mike
  • 4,190
  • 1
  • 22
  • 26
  • Thanks alot :) This is almost what i needed although i didn't want to touch the cPanel's interface for cron, but i figured the best solution would be to do something similar to what you have stated; but instead of manually creating a cron first i would rather just call that cron-manger script from within the website pages when ever a user executes a request to the page. I think i am sure now that vBulletin doesn't use cron's either - because for that they would have to rely on exec() too which is disabled on my host, yet the vbulletin still works with full functionality of those schedulers. – Zubair1 May 14 '10 at 16:48
4

http://ryanfaerman.com/php-crontab-manager/

is a php class that lets you access a crontab from PHP using a class.

CodeJoust
  • 3,674
  • 19
  • 23
  • 1
    As the linked post says, cron's behavior might vary from machine to machine. If your php script runs as user 'apache', then you have to be sure that user is allowed to use crontab, which involves locating the cron.deny and cron.allow files. 'man crontab' (if you have shell access) can tell you where to find those files and how they're interpreted... If you're going to package your code for deployment in unknown environments, though, you may want to 'fake it' as in evolve's answer. – grossvogel May 12 '10 at 14:43
  • @grossvogel i used this library php-corntab-manager but i am getting internal server error , is there any other way to call start or stop cron jobs from php script – Hunt Jul 02 '12 at 19:54
3

I believe vBulletin "fakes" cron jobs. Any user which accesses the page executes code which checks to see if any tasks need to be run.

If however, no users visit the website, none of the cron jobs will execute, the method is 100% reliant on page views.

Also, to prevent delayed page rendering on users who execute the cron jobs they are executed after the page has been rendered.

Again, this is just what I think is happening, I haven't looked at the code myself.

Hope this helps.

tplaner
  • 7,975
  • 3
  • 27
  • 46
  • Even if it's 100% reliant on page views you can always schedule a cronjob to visit the website every minute..... – Pacerier Feb 03 '15 at 16:09
2

Here is my solution :-)

Sample from command line:

bin/cronman --enable /var/www/myproject/.cronfile --user www-data

Click for more: php-crontab-manager

Community
  • 1
  • 1
Chris Suszyński
  • 1,318
  • 14
  • 21
1

Here's a PHP crontab class:

http://www.kavoir.com/2011/10/php-crontab-class-to-add-and-remove-cron-jobs.html

Use the methods to add, edit or remove cron jobs.

datasn.io
  • 11,652
  • 27
  • 102
  • 142