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;
}
}