You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 11 години
преди 12 години
преди 11 години
преди 12 години
преди 12 години
преди 11 години
преди 11 години
преди 11 години
преди 12 години
преди 12 години
преди 11 години
преди 11 години
преди 11 години
преди 12 години
преди 10 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. /**
  3. * ownCloud
  4. *
  5. * @author Jakob Sack
  6. * @copyright 2012 Jakob Sack owncloud@jakobsack.de
  7. *
  8. * This library is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
  10. * License as published by the Free Software Foundation; either
  11. * version 3 of the License, or any later version.
  12. *
  13. * This library is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
  17. *
  18. * You should have received a copy of the GNU Affero General Public
  19. * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  20. *
  21. */
  22. // Unfortunately we need this class for shutdown function
  23. class TemporaryCronClass {
  24. public static $sent = false;
  25. public static $lockfile = "";
  26. public static $keeplock = false;
  27. }
  28. // We use this function to handle (unexpected) shutdowns
  29. function handleUnexpectedShutdown() {
  30. // Delete lockfile
  31. if (!TemporaryCronClass::$keeplock && file_exists(TemporaryCronClass::$lockfile)) {
  32. unlink(TemporaryCronClass::$lockfile);
  33. }
  34. // Say goodbye if the app did not shutdown properly
  35. if (!TemporaryCronClass::$sent) {
  36. if (OC::$CLI) {
  37. echo 'Unexpected error!' . PHP_EOL;
  38. } else {
  39. OC_JSON::error(array('data' => array('message' => 'Unexpected error!')));
  40. }
  41. }
  42. }
  43. try {
  44. require_once 'lib/base.php';
  45. // load all apps to get all api routes properly setup
  46. OC_App::loadApps();
  47. \OC::$session->close();
  48. $logger = \OC_Log::$object;
  49. // Don't do anything if ownCloud has not been installed
  50. if (!OC_Config::getValue('installed', false)) {
  51. exit(0);
  52. }
  53. // Handle unexpected errors
  54. register_shutdown_function('handleUnexpectedShutdown');
  55. // Delete temp folder
  56. OC_Helper::cleanTmpNoClean();
  57. // Exit if background jobs are disabled!
  58. $appmode = OC_BackgroundJob::getExecutionType();
  59. if ($appmode == 'none') {
  60. TemporaryCronClass::$sent = true;
  61. if (OC::$CLI) {
  62. echo 'Background Jobs are disabled!' . PHP_EOL;
  63. } else {
  64. OC_JSON::error(array('data' => array('message' => 'Background jobs disabled!')));
  65. }
  66. exit(1);
  67. }
  68. if (OC::$CLI) {
  69. // Create lock file first
  70. TemporaryCronClass::$lockfile = OC_Config::getValue("datadirectory", OC::$SERVERROOT . '/data') . '/cron.lock';
  71. // We call ownCloud from the CLI (aka cron)
  72. if ($appmode != 'cron') {
  73. // Use cron in future!
  74. OC_BackgroundJob::setExecutionType('cron');
  75. }
  76. // check if backgroundjobs is still running
  77. if (file_exists(TemporaryCronClass::$lockfile)) {
  78. TemporaryCronClass::$keeplock = true;
  79. TemporaryCronClass::$sent = true;
  80. echo "Another instance of cron.php is still running!";
  81. exit(1);
  82. }
  83. // Create a lock file
  84. touch(TemporaryCronClass::$lockfile);
  85. // Work
  86. $jobList = \OC::$server->getJobList();
  87. $jobs = $jobList->getAll();
  88. foreach ($jobs as $job) {
  89. $job->execute($jobList, $logger);
  90. }
  91. } else {
  92. // We call cron.php from some website
  93. if ($appmode == 'cron') {
  94. // Cron is cron :-P
  95. OC_JSON::error(array('data' => array('message' => 'Backgroundjobs are using system cron!')));
  96. } else {
  97. // Work and success :-)
  98. $jobList = \OC::$server->getJobList();
  99. $job = $jobList->getNext();
  100. $job->execute($jobList, $logger);
  101. $jobList->setLastJob($job);
  102. OC_JSON::success();
  103. }
  104. }
  105. // done!
  106. TemporaryCronClass::$sent = true;
  107. // Log the successfull cron exec
  108. if (OC_Config::getValue('cron_log', true)) {
  109. OC_Appconfig::setValue('core', 'lastcron', time());
  110. }
  111. exit();
  112. } catch (Exception $ex) {
  113. \OCP\Util::writeLog('cron', $ex->getMessage(), \OCP\Util::FATAL);
  114. }