[Модуль] Cron (cron)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: [Модуль] Cron (cron)

Сообщение Divan » Пт окт 04, 2019 12:07 am

Ну я так и понял, у меня так и будет работать, раз в неделю Week будет менять значение с 1 на 0 или наоборот. Я пока настрочил такой код, но если можно написать короче и грамотнее, то покажите как нужно это написать, буду благодарен.

Код: Выделить всё

if (getGlobal("Divan.Week") == 0) {	//Если Week=0, то запускается сценарий "График работы 2-2-3: 2 выходных и 5 рабочих дней"
  if (getGlobal("Day.Понедельник") == 1) {			//По графику в понедельник у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Вторник") == 1) {		//По графику во вторник у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Среда") == 1) {			//По графику в среду у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Четверг") == 1) {		//По графику в четверг у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Пятница") == 1) {		//По графику в пятницу у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Суббота") == 1) {		//По графику в субботу у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Воскресенье") == 1) {	//По графику в воскресенье у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  }
  runScript('Оповещение, рабочий или выходной день', array());
} else if (getGlobal("Divan.Week") == 1) {	//Если Week=1, то запускается сценарий "График работы 2-2-3: 5 выходных и 2 рабочих дня"
  if (getGlobal("Day.Понедельник") == 1) {			//По графику в понедельник у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Вторник") == 1) {		//По графику во вторник у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Среда") == 1) {			//По графику в среду у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Четверг") == 1) {		//По графику в четверг у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Пятница") == 1) {		//По графику в пятницу у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Суббота") == 1) {		//По графику в субботу у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Воскресенье") == 1) {	//По графику в воскресенье у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0  			
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  }
  runScript('Оповещение, рабочий или выходной день', array());
}
Создал у объекта Divan свойства WeekendDay\WorkingDay\Week
СпойлерПоказать
Безымянный.jpg
Безымянный.jpg (30.04 КБ) 3339 просмотров
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: [Модуль] Cron (cron)

Сообщение xor » Пт окт 04, 2019 12:16 am

Divan писал(а):
Пт окт 04, 2019 12:07 am
Ну я так и понял, у меня так и будет работать, раз в неделю Week будет менять значение с 1 на 0 или наоборот. Я пока настрочил такой код, но если можно написать короче и грамотнее, то покажите как нужно это написать, буду благодарен.

Код: Выделить всё

if (getGlobal("Divan.Week") == 0) {	//Если Week=0, то запускается сценарий "График работы 2-2-3: 2 выходных и 5 рабочих дней"
  if (getGlobal("Day.Понедельник") == 1) {			//По графику в понедельник у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Вторник") == 1) {		//По графику во вторник у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Среда") == 1) {			//По графику в среду у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Четверг") == 1) {		//По графику в четверг у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Пятница") == 1) {		//По графику в пятницу у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Суббота") == 1) {		//По графику в субботу у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Воскресенье") == 1) {	//По графику в воскресенье у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  }
  runScript('Оповещение, рабочий или выходной день', array());
} else if (getGlobal("Divan.Week") == 1) {	//Если Week=1, то запускается сценарий "График работы 2-2-3: 5 выходных и 2 рабочих дня"
  if (getGlobal("Day.Понедельник") == 1) {			//По графику в понедельник у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Вторник") == 1) {		//По графику во вторник у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Среда") == 1) {			//По графику в среду у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Четверг") == 1) {		//По графику в четверг у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Пятница") == 1) {		//По графику в пятницу у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Суббота") == 1) {		//По графику в субботу у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Воскресенье") == 1) {	//По графику в воскресенье у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0  			
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  }
  runScript('Оповещение, рабочий или выходной день', array());
}
Создал у объекта Divan свойства WeekendDay\WorkingDay\Week
СпойлерПоказать
Безымянный.jpg
при чём тут модуль Крон?
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: [Модуль] Cron (cron)

Сообщение Divan » Пт окт 04, 2019 12:20 am

Я хотел чтобы это работало в кроне, думал, что там есть такая возможность разбивать по неделям, а пока ждал ответа, я придумал такой вариант, но мне кажется, что он слишком запутанный, а через крон было бы проще.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: [Модуль] Cron (cron)

Сообщение Logrus » Пт окт 04, 2019 12:34 am

xor писал(а):
Пт окт 04, 2019 12:16 am
при чём тут модуль Крон?
ну эту ветку же еще не заспамили портянками, при решении не относящихся к ней задач, которые решаются в одну строчку кода
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: [Модуль] Cron (cron)

Сообщение Divan » Пт окт 04, 2019 1:11 am

а можете показать как написать код в одну строчку для графика 2/2/3? Разумеется это лучше обсудить в соответствующей ветке Функция рабочий/выходной день, я не программист и пишу код как могу.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: [Модуль] Cron (cron)

Сообщение Divan » Пт окт 04, 2019 12:28 pm

Можно в крон добавить функцию разделение по неделям? Например запускать 2 или 3 неделю, а потом не запускать или запускать каждую вторую или третью неделю?
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 899 раз

Re: [Модуль] Cron (cron)

Сообщение SmoKE_xDDD » Пт окт 04, 2019 12:43 pm

Divan писал(а):
Пт окт 04, 2019 12:28 pm
Можно в крон добавить функцию разделение по неделям? Например запускать 2 или 3 неделю, а потом не запускать или запускать каждую вторую или третью неделю?
Покапайтесь тут - https://crontab-generator.org/
За это сообщение автора SmoKE_xDDD поблагодарил:
Divan (Пт окт 04, 2019 1:18 pm)
Рейтинг: 1.16%
Mixman
Сообщения: 16
Зарегистрирован: Чт авг 22, 2019 12:43 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: [Модуль] Cron (cron)

Сообщение Mixman » Вт ноя 19, 2019 4:01 pm

А как из метода кодом php можно включать и выключать задачу?
Скажем, в методе NobodyHomeMode.activate я хотел бы добавить код, который отключал бы определённое задание.
Например, по крону у меня каждые 5 минут делается снапшот с камер и распознаётся на наличие людей. Вот когда никого нет дома, то нужно деативировать эту задачу.
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 14 раз
Поблагодарили: 869 раз
Контактная информация:

Re: [Модуль] Cron (cron)

Сообщение Eraser » Вт ноя 19, 2019 4:16 pm

Mixman писал(а):
Вт ноя 19, 2019 4:01 pm
А как из метода кодом php можно включать и выключать задачу?
Скажем, в методе NobodyHomeMode.activate я хотел бы добавить код, который отключал бы определённое задание.
Например, по крону у меня каждые 5 минут делается снапшот с камер и распознаётся на наличие людей. Вот когда никого нет дома, то нужно деативировать эту задачу.
sg("TaskName.Enable", 0); - выключить
sg("TaskName.Enable", 1); - включить
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Mixman
Сообщения: 16
Зарегистрирован: Чт авг 22, 2019 12:43 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: [Модуль] Cron (cron)

Сообщение Mixman » Вт ноя 19, 2019 4:22 pm

Eraser писал(а):
Вт ноя 19, 2019 4:16 pm
Mixman писал(а):
Вт ноя 19, 2019 4:01 pm
А как из метода кодом php можно включать и выключать задачу?
Скажем, в методе NobodyHomeMode.activate я хотел бы добавить код, который отключал бы определённое задание.
Например, по крону у меня каждые 5 минут делается снапшот с камер и распознаётся на наличие людей. Вот когда никого нет дома, то нужно деативировать эту задачу.
sg("TaskName.Enable", 0); - выключить
sg("TaskName.Enable", 1); - включить
Вместо TaskName можно использовать ID задачи? У меня некоторые имена задач на русском языке.
Ответить