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 3.1KB

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