In Windows adding a scheduled task is just not as straight forward as adding a CRON job using Linux. (Don’t get me started on troubleshooting a Windows Schedule Task that did not run for some reason.) However, it is not so difficult once you get it figured out. Here is what I did:
In this case I wanted to run a CakePHP script as a CRON job, or more accurately, as a Windows Scheduled Task since this customer insisted I create the application and use a Windows server. (I used XAMPP, so it wasn’t too bad.)
In order to run the script and take full advantage of the models in CakePHP it required that I use the CakePHP shell. Luckily the CakePHP developers created a ‘cake.bat’ script that enables this to happen on a Windows machine. Normally on a Windows or Linux server you can navigate, via command line, to the ‘app’ folder and execute the ‘cake name_of_script’ command, but using Windows Scheduled Tasks you need to execute the bat file.
Windows Scheduled Task Settings:
Run: C:\path\to\cake.bat script_name {without the extension .php}
Start in: C:\path\to\app\folder
Run As: type in the appropriate users
Then of course you will need to go to the Schedule tab and set in the schedule you desire for your script.
Here is a screenshot: (you can see the default folders for xampp were used)
IMPORTANT: This entire process assumes that you have already created your script and placed it in the appropriate directory “/app/vendors/shells/{name_of_script.php}”. It also assumes you understand how to create a cronjob for CakePHP to use. (see below for a sample)
Sample content of ‘script_name.php’:
class ScriptNameShell extends Shell { var $uses = array('model1','model2'); /** * the main function is kicked off like a contructor * */ function main() { echo 'Doing something.'; $callingSomething = $this->otherFunction(); echo $callingSomething; } function otherFunction() { $content = 'This is content from otherFunction.'; return $content; } } |