Solved

How to run a process so that it won't timeout

Posted on 2009-04-04
5
145 Views
Last Modified: 2012-05-06
I have a scheduling program in a web application written in PHP and MySQL, that times out every time it is run without fail. It does it's job, it just doesn't get to the end before the server times out, so my users need to keep launching it until all of the schedule slots are filled. I do not believe that I can make my process much more efficient than it currently is, so I need to figure out a way for the server to keep running it, even though it may take a long time (ie. 5 - 10 minutes)

My thought is that it must be possible to give the process over to the server so that it is not associated with the user's session. I suspect that if I were to run the process via Cron, it would run to completion without timing out.

What are my options here? My app is hosted on a regular, everyday LAMP provider where I only have as much control as offered by the cPanel.
0
Comment
Question by:dirknibleck
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
5 Comments
 
LVL 10

Expert Comment

by:cyberstalker
ID: 24069383
Just add

set_time_limit(1200);

In the beginning of the script.
0
 
LVL 15

Author Comment

by:dirknibleck
ID: 24074061
I haven't had success with set_time_limit in this script. It still times out after about 5 minutes. Is there no way to make a process run like a batch job? What if I want the process to keep running even if a user were to exit their browser?
0
 
LVL 10

Accepted Solution

by:
cyberstalker earned 500 total points
ID: 24074954
If it aborts, it is probably because the browser cancels the request. There's two ways around this. You can either send something to the browser every now and then just to keep it happy (don't forget to flush() too), or you can use ignore_user_abort(), which will keep the process running even if the browser disconnects.

Of course you can also run the script from cron.
0
 
LVL 15

Author Comment

by:dirknibleck
ID: 24082966
What does the flush() do?

For sending data to the browser could I send back % complete and have an AJAX listener, or will that only run once http stops returning?
0
 
LVL 10

Expert Comment

by:cyberstalker
ID: 24084589
By default, PHP buffers output. This means that your output will only actually get send when the script finishes, when the output buffer is full or when you implicitly flush() the buffers.

So if you don't do the flush(), nothing will get send to the browser at all and the browser will still stop listening.

Sending a completion percentage to an AJAX listener will not do you much good, unless you apply a http push technique. I prefer to use multipart/x-mixed-replace documents, which are supported by most browsers, except Internet Explorer. You can also use a framework for it, like Comet.
0

Featured Post

Resolve Critical IT Incidents Fast

If your data, services or processes become compromised, your organization can suffer damage in just minutes and how fast you communicate during a major IT incident is everything. Learn how to immediately identify incidents & best practices to resolve them quickly and effectively.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction (All good things must come to an end (http://en.wikipedia.org/wiki/All_Good_Things...))The original MySQL API (http://php.net/manual/en/book.mysql.php) has gone away, deprecated by PHP in Version 5.5, and removed from PHP in all current…
Foolproof security solutions has become one of the key necessities of every e-commerce or Internet banking website. If you too own an online shopping site then its vital for you to equip your web portal with customer security features that can allow…
Learn how to set-up custom confirmation messages to users who complete your Wufoo form. Include inputs from fields in your form, webpage redirects, and more with Wufoo’s confirmation options.
Learn how to set-up PayPal payment integration in your Wufoo form. Allow your users to remit payment through PayPal upon completion of your online form. This is helpful for collecting membership payments, customer payments, donations, and more.

733 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question