source: trunk/www/model/task.php@ 63

Last change on this file since 63 was 54, checked in by george, 16 years ago
  • Přeorganizování složek a rozhození souborů do podsložek model, common, design a style.
  • Upraveno: Rozpracované oddělení serverů na více světů.
File size: 2.0 KB
Line 
1<?php
2
3class Task extends Module
4{
5 var $TempScript = 'temp/wowhosting_script.sh';
6
7 function __construct($Database)
8 {
9 $this->Database = $Database;
10 }
11
12 function Add($Title, $Task)
13 {
14 global $System;
15
16 $CommandList = implode("\n", $Task)."\n";
17 $this->Database->insert('Task', array('User' => $System->Modules['User']->User['Id'], 'Title' => $Title, 'TimeCreate' => 'NOW()', 'CommandList' => $CommandList));
18 }
19
20 function ProcessAll()
21 {
22 global $Config;
23
24 chdir($Config['BaseDir']);
25 $DbResult = $this->Database->query('SELECT * FROM Task WHERE State = 0 ORDER BY Id,TimeCreate ASC');
26 while($Task = $DbResult->fetch_assoc())
27 {
28 $this->Database->query('UPDATE Task SET TimeStart=NOW(), State=1 WHERE Id='.$Task['Id']);
29 echo('Provádím úlohu '.$Task['Id'].': '.$Task['Title']."...\n");
30 $Task['CommandList'] = "#!/bin/sh\n".str_replace("\r", '', $Task['CommandList']);
31 file_put_contents($this->TempScript, $Task['CommandList']);
32 chmod($this->TempScript, 0755);
33 exec($this->TempScript.' >'.$this->TempScript.'.log 2>'.$this->TempScript.'.err');
34 $StdOut = file_get_contents($this->TempScript.'.log');
35 unlink($this->TempScript.'.log');
36 $StdErr = file_get_contents($this->TempScript.'.err');
37 unlink($this->TempScript.'.err');
38 echo("Hotovo\n");
39 $this->Database->query('UPDATE `Task` SET `TimeEnd`=NOW(), `State`=2, `Output`="'.addslashes($StdOut).'", `Error`="'.addslashes($StdErr).'" WHERE `Id`='.$Task['Id']);
40 }
41 }
42
43 function ProcessAllCycle()
44 {
45 $this->Database->query('UPDATE Task SET State=2 WHERE State=1'); // Change not finished running tasks to finished
46 $this->Database->query('UPDATE Task SET TimeEnd=NOW() WHERE State=2 AND TimeEnd = NULL'); // Set end time to finished tasks
47 while(1)
48 {
49 $this->ProcessAll();
50 sleep(1);
51 }
52 }
53
54 function Abort($Id)
55 {
56 $this->Database->query('DELETE FROM Task WHERE Id='.$Id);
57 }
58}
59
60?>
Note: See TracBrowser for help on using the repository browser.