Blame view

sources/cron.php 3.4 KB
03e52840d   Kload   Init
1
2
  <?php
  /**
31b7f2792   Kload   Upgrade to ownclo...
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   * ownCloud
   *
   * @author Jakob Sack
   * @copyright 2012 Jakob Sack owncloud@jakobsack.de
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
   * License as published by the Free Software Foundation; either
   * version 3 of the License, or any later version.
   *
   * This library is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
   *
   * You should have received a copy of the GNU Affero General Public
   * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
   *
   */
03e52840d   Kload   Init
22
23
  
  // Unfortunately we need this class for shutdown function
31b7f2792   Kload   Upgrade to ownclo...
24
  class TemporaryCronClass {
03e52840d   Kload   Init
25
26
27
28
29
30
31
32
  	public static $sent = false;
  	public static $lockfile = "";
  	public static $keeplock = false;
  }
  
  // We use this function to handle (unexpected) shutdowns
  function handleUnexpectedShutdown() {
  	// Delete lockfile
31b7f2792   Kload   Upgrade to ownclo...
33
34
  	if (!TemporaryCronClass::$keeplock && file_exists(TemporaryCronClass::$lockfile)) {
  		unlink(TemporaryCronClass::$lockfile);
03e52840d   Kload   Init
35
  	}
31b7f2792   Kload   Upgrade to ownclo...
36

03e52840d   Kload   Init
37
  	// Say goodbye if the app did not shutdown properly
31b7f2792   Kload   Upgrade to ownclo...
38
39
40
41
42
  	if (!TemporaryCronClass::$sent) {
  		if (OC::$CLI) {
  			echo 'Unexpected error!' . PHP_EOL;
  		} else {
  			OC_JSON::error(array('data' => array('message' => 'Unexpected error!')));
03e52840d   Kload   Init
43
44
45
  		}
  	}
  }
31b7f2792   Kload   Upgrade to ownclo...
46
  try {
03e52840d   Kload   Init
47

31b7f2792   Kload   Upgrade to ownclo...
48
  	require_once 'lib/base.php';
03e52840d   Kload   Init
49

31b7f2792   Kload   Upgrade to ownclo...
50
  	session_write_close();
03e52840d   Kload   Init
51

31b7f2792   Kload   Upgrade to ownclo...
52
  	$logger = \OC_Log::$object;
03e52840d   Kload   Init
53

31b7f2792   Kload   Upgrade to ownclo...
54
55
56
  	// Don't do anything if ownCloud has not been installed
  	if (!OC_Config::getValue('installed', false)) {
  		exit(0);
03e52840d   Kload   Init
57
  	}
03e52840d   Kload   Init
58

31b7f2792   Kload   Upgrade to ownclo...
59
60
61
62
63
  	// Handle unexpected errors
  	register_shutdown_function('handleUnexpectedShutdown');
  
  	// Delete temp folder
  	OC_Helper::cleanTmpNoClean();
03e52840d   Kload   Init
64

31b7f2792   Kload   Upgrade to ownclo...
65
66
67
68
69
70
71
72
73
74
  	// Exit if background jobs are disabled!
  	$appmode = OC_BackgroundJob::getExecutionType();
  	if ($appmode == 'none') {
  		TemporaryCronClass::$sent = true;
  		if (OC::$CLI) {
  			echo 'Background Jobs are disabled!' . PHP_EOL;
  		} else {
  			OC_JSON::error(array('data' => array('message' => 'Background jobs disabled!')));
  		}
  		exit(1);
03e52840d   Kload   Init
75
  	}
31b7f2792   Kload   Upgrade to ownclo...
76
77
78
  	if (OC::$CLI) {
  		// Create lock file first
  		TemporaryCronClass::$lockfile = OC_Config::getValue("datadirectory", OC::$SERVERROOT . '/data') . '/cron.lock';
03e52840d   Kload   Init
79

31b7f2792   Kload   Upgrade to ownclo...
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  		// We call ownCloud from the CLI (aka cron)
  		if ($appmode != 'cron') {
  			// Use cron in future!
  			OC_BackgroundJob::setExecutionType('cron');
  		}
  
  		// check if backgroundjobs is still running
  		if (file_exists(TemporaryCronClass::$lockfile)) {
  			TemporaryCronClass::$keeplock = true;
  			TemporaryCronClass::$sent = true;
  			echo "Another instance of cron.php is still running!";
  			exit(1);
  		}
  
  		// Create a lock file
  		touch(TemporaryCronClass::$lockfile);
  
  		// Work
  		$jobList = new \OC\BackgroundJob\JobList();
  		$jobs = $jobList->getAll();
  		foreach ($jobs as $job) {
  			$job->execute($jobList, $logger);
  		}
  	} else {
  		// We call cron.php from some website
  		if ($appmode == 'cron') {
  			// Cron is cron :-P
  			OC_JSON::error(array('data' => array('message' => 'Backgroundjobs are using system cron!')));
  		} else {
  			// Work and success :-)
  			$jobList = new \OC\BackgroundJob\JobList();
  			$job = $jobList->getNext();
  			$job->execute($jobList, $logger);
  			$jobList->setLastJob($job);
  			OC_JSON::success();
  		}
03e52840d   Kload   Init
116
  	}
03e52840d   Kload   Init
117

31b7f2792   Kload   Upgrade to ownclo...
118
119
120
121
122
123
124
  	// done!
  	TemporaryCronClass::$sent = true;
  	exit();
  
  } catch (Exception $ex) {
  	\OCP\Util::writeLog('cron', $ex->getMessage(), \OCP\Util::FATAL);
  }