BioTorrents.de’s version of Gazelle
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.

index.php 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. // This page is run every 15 minutes by cron
  3. // todo: See if strict equality will break everything
  4. set_time_limit(50000);
  5. ob_end_flush();
  6. gc_enable();
  7. $ScheduleDebug = false;
  8. $PCount = chop(shell_exec('/usr/bin/pgrep -cf schedule.php'));
  9. // 3 because the cron job starts two processes and pgrep finds itself
  10. if ($PCount > 3) {
  11. error("schedule.php is already running. Exiting ($PCount)\n", $NoHTML = true);
  12. }
  13. $AS = check_perms('admin_schedule');
  14. function run_all_in($Dir)
  15. {
  16. $Tasks = array_diff(scandir(SERVER_ROOT.'/sections/schedule/'.$Dir, 1), ['.', '..']);
  17. extract($GLOBALS);
  18. foreach ($Tasks as $Task) {
  19. $TimeStart = microtime(true);
  20. include($Dir.'/'.$Task);
  21. if ($ScheduleDebug) {
  22. echo $Dir.'/'.$Task.': '.number_format(microtime(true)-$TimeStart, 3).($AS?"<br>":"\n");
  23. }
  24. }
  25. }
  26. if ((!isset($_REQUEST['key']) || $_REQUEST['key'] !== SCHEDULE_KEY)
  27. #&& (!isset($argv[1]) || $argv[1] !== SCHEDULE_KEY)
  28. && !$AS) {
  29. error(403);
  30. }
  31. if ($AS) {
  32. authorize();
  33. View::show_header();
  34. echo '<div class="box">';
  35. }
  36. $ASBreak = $AS ? '<br />' : "\n";
  37. $DB->query("
  38. SELECT
  39. `NextHour`,
  40. `NextDay`,
  41. `NextBiWeekly`
  42. FROM
  43. `schedule`
  44. ");
  45. list($Hour, $Day, $BiWeek) = $DB->next_record();
  46. $NextHour = date('H');
  47. $NextDay = date('d');
  48. $NextBiWeek = (date('d') < 22 && date('d') >= 8) ? 22 : 8;
  49. $DB->query("
  50. UPDATE
  51. `schedule`
  52. SET
  53. `NextHour` = $NextHour,
  54. `NextDay` = $NextDay,
  55. `NextBiWeekly` = $NextBiWeek
  56. ");
  57. $sqltime = sqltime();
  58. echo "$sqltime $ASBreak";
  59. // Run every time
  60. if (!(isset($_GET['notevery']) && $_GET['notevery'])) {
  61. run_all_in('every');
  62. echo "Ran every-time functions $ASBreak";
  63. }
  64. // Run every hour
  65. if ($Hour !== $NextHour || (isset($_GET['runhour']) && $_GET['runhour'])) {
  66. run_all_in('hourly');
  67. echo "Ran hourly functions $ASBreak";
  68. }
  69. // Run every day
  70. if ($Day !== $NextDay || (isset($_GET['runday']) && $_GET['runday'])) {
  71. run_all_in('daily');
  72. echo "Ran daily functions $ASBreak";
  73. }
  74. // Run every week
  75. if (($Day !== $NextDay && date('w') === 0) || (isset($_GET['runweek']) && $_GET['runweek'])) {
  76. run_all_in('weekly');
  77. echo "Ran weekly functions $ASBreak";
  78. }
  79. // Run twice per month
  80. if ($BiWeek !== $NextBiWeek || (isset($_GET['runbiweek']) && $_GET['runbiweek'])) {
  81. run_all_in('biweekly');
  82. echo "Ran bi-weekly functions $ASBreak";
  83. }
  84. // Run every month
  85. if (($BiWeek !== $NextBiWeek && $BiWeek === 8) || (isset($_GET['runmonth']) && $_GET['runmonth'])) {
  86. run_all_in('monthly');
  87. echo "Ran monthly functions $ASBreak";
  88. }
  89. // Run on request
  90. if (isset($_GET['runmanual']) && $_GET['runmanual']) {
  91. run_all_in('manually');
  92. echo "Ran manual functions $ASBreak";
  93. }
  94. if ($AS) {
  95. echo '</div>';
  96. View::show_footer();
  97. } else {
  98. echo "-------------------------\n\n";
  99. }