crontab.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. if(!DEFINED('EGP'))
  3. exit(header('Refresh: 0; URL=http://'.$_SERVER['SERVER_NAME'].'/404'));
  4. $html->nav('Планировщик задач');
  5. if($go)
  6. {
  7. $sql->query('SELECT `address`, `passwd` FROM `panel` LIMIT 1');
  8. $panel = $sql->get();
  9. include(LIB.'ssh.php');
  10. if(!$ssh->auth($panel['passwd'], $panel['address']))
  11. sys::outjs(array('e' => sys::text('error', 'ssh')), $nmch);
  12. // Удаление задания
  13. if(isset($url['action']) AND $url['action'] == 'delete')
  14. {
  15. $task = isset($_POST['task']) ? sys::int($_POST['task']) : sys::outjs(array('s' => 'ok'), $nmch);
  16. $sql->query('SELECT `cron` FROM `control_crontab` WHERE `id`="'.$task.'" AND `server`="'.$sid.'" LIMIT 1');
  17. if(!$sql->num())
  18. $sys->outjs(array('s' => 'ok'), $nmch);
  19. $cron = $sql->get();
  20. $ssh->set('touch /etc/crontab; cat /etc/crontab');
  21. $crontab = str_replace($cron['cron'], '', $ssh->get());
  22. // Временный файл
  23. $temp = sys::temp($crontab);
  24. $ssh->setfile($temp, '/etc/crontab', 0644);
  25. $ssh->set("sed -i '/^$/d' /etc/crontab;"
  26. .'crontab -u root /etc/crontab');
  27. unlink($temp);
  28. $sql->query('DELETE FROM `control_crontab` WHERE `id`="'.$task.'" LIMIT 1');
  29. sys::outjs(array('s' => 'ok'), $nmch);
  30. }
  31. // Добавление задания
  32. $sql->query('SELECT `id` FROM `control_crontab` WHERE `server`="'.$sid.'" LIMIT 5');
  33. if($sql->num() == $cfg['crontabs'])
  34. sys::outjs(array('e' => sys::text('servers', 'crontab')), $nmch);
  35. $data = array();
  36. $data['task'] = isset($_POST['task']) ? $_POST['task'] : 'start';
  37. $task = in_array($server['game'], array('samp', 'crmp')) ? array('start', 'restart', 'stop') : array('start', 'restart', 'stop', 'console');
  38. if(!in_array($data['task'], $task))
  39. $data['task'] = 'start';
  40. $data['commands'] = isset($_POST['commands']) ? base64_encode(htmlspecialchars($_POST['commands'])) : '';
  41. $data['allhour'] = isset($_POST['allhour']) ? true : false;
  42. $data['hour'] = isset($_POST['hour']) ? $_POST['hour'] : '00';
  43. $data['minute'] = isset($_POST['minute']) ? $_POST['minute'] : '00';
  44. $data['week'] = (isset($_POST['week']) AND is_array($_POST['week'])) ? $_POST['week'] : array();
  45. $sql->query('INSERT INTO `control_crontab` set `server`="'.$sid.'"');
  46. $cid = $sql->id();
  47. include(LIB.'games/games.php');
  48. $cron_rule = ctrl::crontab($sid, $cid, $data);
  49. $ssh->set('echo "'.$cron_rule.'" >> /etc/crontab;'
  50. ."sed -i '/^$/d' /etc/crontab;"
  51. .'crontab -u root /etc/crontab');
  52. $time = games::crontab_time($data['allhour'], $data['hour'], $data['minute']);
  53. $week = games::crontab_week($data['week']);
  54. $sql->query('UPDATE `control_crontab` set `server`="'.$sid.'", `task`="'.$data['task'].'", `cron`="'.$cron_rule.'", `week`="'.$week.'", `time`="'.$time.'", `commands`="'.$data['commands'].'" WHERE `id`="'.$cid.'" LIMIT 1');
  55. sys::outjs(array('s' => 'ok'), $nmch);
  56. }
  57. $aTask = array(
  58. 'start' => 'Включение сервера',
  59. 'stop' => 'Выключение сервера',
  60. 'restart' => 'Перезагрузка сервера',
  61. 'console' => 'Отправка команд на сервер'
  62. );
  63. $sql->query('SELECT `id`, `task`, `week`, `time` FROM `control_crontab` WHERE `server`="'.$sid.'" ORDER BY `id` ASC');
  64. while($crontab = $sql->get())
  65. {
  66. $html->get('crontab_list', 'sections/control/servers/games/settings');
  67. $html->set('id', $crontab['id']);
  68. $html->set('task', $aTask[$crontab['task']]);
  69. $html->set('week', $crontab['week']);
  70. $html->set('time', $crontab['time']);
  71. $html->pack('crontab');
  72. }
  73. $html->get('crontab', 'sections/control/servers/'.$server['game'].'/settings');
  74. $html->set('id', $id);
  75. $html->set('server', $sid);
  76. $html->set('time', date('H:i:s', $start_point));
  77. $html->set('crontab', isset($html->arr['crontab']) ? $html->arr['crontab'] : '');
  78. $html->pack('main');
  79. ?>