Страницы

Поиск по вопросам

Показаны сообщения с ярлыком cron. Показать все сообщения
Показаны сообщения с ярлыком cron. Показать все сообщения

понедельник, 13 апреля 2020 г.

Cron запуск Ruby скрипта

#cron #ruby #linux

                    
Добавляю в crontab 
*/1 * * * * root ruby /home/www/admin/cron.rb

В syslog
Apr 30 13:01:01 cs10433 /USR/SBIN/CRON[5448]: (root) CMD (ruby /home/www/admin/cron.rb)
    Apr 30 13:01:01 cs10433 /USR/SBIN/CRON[5447]: (CRON) error (grandchild #5448
failed with exit status 127)

Как заставить cron выпаолнять скрипТ?    


Ответы

Ответ 1



Код выхода 127 - это ошибка "command not found". Либо шелл не видит ruby, либо в скрипте вы вызываете команду, которую не видит шелл.

Ответ 2



#!/usr/bin/env bash export PATH ; PATH="/usr/local/rvm/gems/ruby-1.9.3-p392/bin:/usr/local/rvm/gems/ruby-1.9.3-p392@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p392/bin:/usr/local/rvm/bin:$PATH" export rvm_env_string ; rvm_env_string='ruby-1.9.3-p392' export rvm_path ; rvm_path='/usr/local/rvm' export rvm_ruby_string ; rvm_ruby_string='ruby-1.9.3-p392' unset rvm_gemset_name export RUBY_VERSION ; RUBY_VERSION='ruby-1.9.3-p392' export GEM_HOME ; GEM_HOME='/usr/local/rvm/gems/ruby-1.9.3-p392' export GEM_PATH ; GEM_PATH='/usr/local/rvm/gems/ruby-1.9.3-p392:/usr/local/rvm/gems/ruby-1.9.3-p392@global' export MY_RUBY_HOME ; MY_RUBY_HOME='/usr/local/rvm/rubies/ruby-1.9.3-p392' export IRBRC ; IRBRC='/usr/local/rvm/rubies/ruby-1.9.3-p392/.irbrc' unset MAGLEV_HOME unset RBXOPT ruby /home/www/admin/cron.rb cron.sh

суббота, 11 апреля 2020 г.

Как настроить в cron выполнение просроченных задач

#cron

                    
Есть задача в кроне например на 8.20. В это время комп выключен. Как сделать, чтобы
когда он включится опять, задача исполнилась?    


Ответы

Ответ 1



Идея такова добавить в скрипт (назовем его cronjob.sh) обновление некоторого вспомогательного файла, например, lasttouch lastДальше добавить в скрипт автозапуска тот же скрипт, что и в крон и выполнять его, если last обновлялся позднее, чем, например, 1 час тому назадtouch -d '-1 hour' referenceif [ reference -nt last ]; then # Выполнить скрипт из cron'а /home/user/cronjob.shfiВ скрипт автозапуска на разных Linux по-разному добавляется, например, для Ubuntu это строка в исполняемом файле /etc/init.d/localsudo echo "/home/user/autostart.sh" >> /etc/init.d/localsudo chmod +x /etc/init.d/localsudo update-rc.d local defaults 80

Ответ 2



есть же anacron https://ru.wikipedia.org/wiki/Anacron и другие команды отложеного запуска.

воскресенье, 15 марта 2020 г.

Резервное копирование MySQL

#mysql #cron #резервное_копирование


Как можно сделать резервное копирование MySQL с удаленного сервера, может есть бесплатное
ПО или можно как то создать  при помощи cron только не на текущем сервере а удаленно?
    


Ответы

Ответ 1



Есть замечательная утилита mysqldump: > mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME > dump.txt Расположите эту строчку в bash скрипте и запускайте в cron.

Ответ 2



на том сервере где лежит сайт мало места для бэкапов, нужно сохранять все бекапы на другом с помощью, например, программы ssh (и демона sshd на удалённой машине), можно запускать какую-нибудь команду/программу на удалённой машине, а вывод её получать (и, при необходимости, сохранять) — на локальной. пример: $ ssh удалённая.машина mysqldump параметры > dump.file на удалённой машине будет запущена программа mysqldump параметры, а вывод её будет сохранён в файле dump.file на вашей локальной машине (точнее, на той, где вы выполняете приведённую команду).

вторник, 18 февраля 2020 г.

Аналог CRON в android приложении

#android #cron


Необходимо, чтобы приложение запускалось каждые пол-часа и проверяло обновления.

Через какой механизм это можно реализовать? Нужно что-то вроде CRON.
    


Ответы

Ответ 1



AlarmManager обеспечивает доступ к сервису планировки задач Android. Он регистрирует в системе интент и когда наступает обозначенное время запускает этот интент. Если момент вызова приложение закрыто, то оно будет вновь запущено.

воскресенье, 16 февраля 2020 г.

Аналог CRON в android приложении

#android #cron


Необходимо, чтобы приложение запускалось каждые пол-часа и проверяло обновления.

Через какой механизм это можно реализовать? Нужно что-то вроде CRON.
    


Ответы

Ответ 1



AlarmManager обеспечивает доступ к сервису планировки задач Android. Он регистрирует в системе интент и когда наступает обозначенное время запускает этот интент. Если момент вызова приложение закрыто, то оно будет вновь запущено.

понедельник, 3 февраля 2020 г.

Разбор записи в файле задач cron

#linux #bash #cron


Вот строка:

# every hour
0 * * * *  /usr/bin/php  -d memory_limit=500M  -f [wwwpath]cron/cron-hour.php > /dev/null 2>&1


Что я уже нашел:


0 * * * * формат времени из сайта просто видно что означает.
/usr/bin/php указывает обработчик
-d определяет INI php из параметром memory_limit=500M
-f приступает к обработке файла
[wwwpath]cron/cron-hour.php место, откуда берётся файл
> меняем вывод результата


и далее — темнота. Пожалуйста, растолкуйте с 6-го пункта включительно, как дальше
работает интерпретатор?
    


Ответы

Ответ 1



Что за магическое something > /dev/null 2>&1? Как вы уже правильно заметили, > перенаправляет поток. Цитируя статью I/O Redirection: COMMAND_OUTPUT > # Redirect stdout to a file. # Creates the file if not present, otherwise overwrites it. # Перенаправляет stdout в файл # Создает файл, если он не существует, в противном случае, перезаписывает Обратите внимание, > перенаправляет только stdout, но помимо него есть еще два потока: stdin и stderr. Последний нас интересует больше всего. У каждого потока есть свой дескриптор: stdin: 0 stdout: 1 stderr: 2 Соответственно, нам осталось перенаправить куда-нибудь в укромное место поток stderr. Это можно сделать с помощью команды 2>. В данном случае, мы перенаправляем его в поток stdout, что эквивалентно 2>&1: M>&N # "M" is a file descriptor, which defaults to 1, if not set. # "N" is another file descriptor. # "M" - дескриптор файла. По умолчанию - 1 # "N" - дескриптор файла, в который будет организовано перенаправление.

Ответ 2



/usr/bin/php -d memory_limit=500M -f [wwwpath]cron/cron-hour.php > /dev/null 2>&1 Это одна-единственная команда баша. > /dev/null означает, что вывод будет записываться в файл /dev/null (специальный файл, который всегда пуст) - то есть дескриптор STDOUT (или просто 1) будет открытым файлом /dev/null 2>&1 означает, что STDERR (2) будет просто дубликатом STDOUT (1) Короче говоря, и обычный вывод, и вывод ошибок не будет нигде отображаться и не будет никуда записываться.

четверг, 23 января 2020 г.

Пропадают записи в crontab [закрыт]

#linux #cron


        
             
                
                    
                        
                            Закрыт. Этот вопрос не по теме. Ответы на него в данный
момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы он соответствовал тематике «Stack Overflow на русском».
                        
                        Закрыт 3 года назад.
                                                                                
           
                
        
В последнее время пропадают записи из кронтаба чудесным образом вообще, в первый
раз когда произошло подумал что какое то серьезное обновление произошло и записи подтерлись,
но это случилось и во второй раз, подскажите куда копать вообще, а то не очень хорошо
на боевом сервере. Задания из под рута Linux Debian 8

Поискал в сети есть вариант что это из за того что вместо табов стоят пробелы проверяю.



обновление из «ответа»

Ответ оказался совсем простым: промахнулся, и вместо crontab -e написал crontab -r.
    


Ответы

Ответ 1



куда копать вообще направления розысков (порядок — случайный) ваша ошибка/невнимательность ошибка/невнимательность ваших коллег сторонее программное обеспечение, взятое из «левых» источников (типа «официальных сайтов» и т.п.) взлом (включает утечку/подбор паролей, эксплуатацию какой-нибудь [не]известной уязвимости какой-нибудь программы и т.д. и т.п.) очень общие и поверхностные рекомендации: внимательный просмотр логов, предшествующих изменению файла просмотр вывода программы last (подробнее — $ man last) проверка контрольных сумм файлов, входящих в пакеты (пакет debsums) «слежка» за изменением файлов с использованием механизма inotify (например, с помощью incron)

пятница, 10 января 2020 г.

В каком порядке будут выполняться задания cron

#cron


Допустим, есть такой crontab с гипотетическими заданиями:

*/5 * * * *  job1 &
*/10 * * * * job2
*/15 * * * * job3


Все задачи выполняются примерно минуту. Как они будут выполняться, скажем, в 03:30?


job1 уходит в background и там начинает свою работу, потом запускается и отрабатывает
job2, после этого запускается и отрабатывает job3.
Последовательно запускаются все три задания, и все три работают одновременно.

    


Ответы

Ответ 1



Ровно в 3:30 запустятся одновременно три задачи. Ну может не совсем одновременно, а с задержкой в несколько тактов, но это уже не суть важно.

Как настроить задачи для cron?

#php #mysql #cron


Есть такой таск: пользователь выбирает задачу и время ее выполнения(каждых 5 минут,
каждый день и т.д).- это все я записываю в бд.

Есть файлик cron.php который выполняется каждых 5 минут проверяет в бд есть ли активные
задачи. 

Как правильно записывать в бд время, что бы php понимал стоит ли выполнить задачу
или нет.
Допустим пользователь выбрал каждых 5 минут - что записать в бд? 

Подскажите кто с этим работал. Буду благодарен :-)
    


Ответы

Ответ 1



Хранить в базе интервал в секундах и дату последнего запуска в unix timestamp. В бд добавляем в запрос: where (interval + laststart) < now() Получаем таким образом все задачи которые необходимо выполнить, и после выполнения записываем текущее time() в поле laststart.

среда, 1 января 2020 г.

Как на Linux (Debian/Ubuntu) настроить автоматические BackUp БД Postgresql

#linux #ubuntu #postgresql #cron #crontab


Дано:

Установлен Postgresql. В нём есть БД.

Задача:

По расписанию делать бэкап.

Вопрос:

Как это сделать на Linux силами ОС?
    


Ответы

Ответ 1



Создаём папки для бэкапов и логов: /data/dbBackup/myDbName/logs силами ftp клиента или вручную, через консоль. Устанавливаем редактор текстовых файлов nano, если его нет в системе: apt-get install nano Запускаем crontab программу для редактирования списка задач cron-а, используя nano: EDITOR=nano crontab -e Создаём задачу для cron путём добавления команды к исполнению по расписанию. В данном случае - раз в минуту. /usr/bin/pg_dump - путь к метоположению программы pg_dump, которая, собственно и делает бэкап. myDbName - имя базы данных для которой надо сделать бэкап. >> /d ata/dbBackup/myDbName/logs/dbBackup.log 2>&1 - нужно для получения логов выполнения задачи. Например, если у вас нет каких-то прав, папки не созданы, пароль к БД у юзера, запускающего программу бэкапов неверен или ещё что - сообщение об ошибке запишется в файл /d ata/dbBackup/myDbName/logs/dbBackup.log. $(date +\%Y-\%m-\%d-\%H-\%M-\%S) - нужно для создания файла, в имени которого будет дата его создания. * * * * * /usr/bin/pg_dump -U postgres -h localhost -w -c -f /data/dbBackup/myDbName/myDbName_$(date +\%Y-\%m-\%d-\%H-\%M-\%S).sql myDbName >> /data/dbBackup/myDbName/logs/dbBackup.log 2>&1 Чтобы сохранить изменения в crontab надо: Ctrl+X чтобы выйти, Y чтобы подтвердить сохранение изменений, Enter чтобы подтвердить в какой файл сохранить. Чтобы следить в реальном времени за запуском задач cron-а: tail -f /var/log/syslog | grep CRON

вторник, 31 декабря 2019 г.

Завершить процесс в определенное время bash

#linux #bash #cron


Здравствуйте! 

Помогите, пожалуйста, сделать скрипт для "убийства" процесса каждый день в 04:30. 

P.S.: ОС CentOS. Знаю про cron, bash не изучал. Процесс называется /root/samp03/samp03svr
    


Ответы

Ответ 1



Используйте для этого крон в сочетании с командой pkill samp03svr. Соответственно строка для /etc/crontab: 30 4 * * * pkill samp03svr

Ответ 2



Сейчас придут настоящие админы и скажут как правильно, но я бы делал через cron: killall samp03svr

пятница, 27 декабря 2019 г.

Не работает запуск через cron

#linux #ubuntu #cron


OS Ubuntu 16.04
Нужно запустить leafpad с помощью cron в нечетную минуту текущего часа по нечетным дням.
Использую для 18 ноября 04 часа.

1-59/2 4 */2 1-12 0-7 DISPLAY=:0 leafpad
1-59/2 4 2-31/2 1-12 0-7 DISPLAY=:0 leafpad


Но эти команды не работают как для 18 числа, так и для 19. Следующая команда работает(открывает
leafpad) как для 18, так и для 19.

1-59/2 4 1-31/2 1-12 0-7 DISPLAY=:0 leafpad


Объясните пожалуйста мою ошибку?
    


Ответы

Ответ 1



судя по содержанию вот этого ответа, чётные числа месяца надо указывать так: 2-30/2 а нечётные так: 1-31/2 и, да, чтобы указать «любой месяц», не нужно писать 1-12, достаточно *. аналогично и для указания «любого дня недели»: вместо 0-7 тоже достаточно *.

четверг, 26 декабря 2019 г.

Ubuntu. Запуск скрипта при блокировке экрана по Ctrl+Alt+L

#ubuntu #bash #cron #sh


Возможно ли прикрутить скрипт в дополнение к горячим клавишам (Ctrl+Alt+L) на блокировку
экрана?

Есть в Ubuntu такой баг https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1286910),
если при блокировке экрана стоит раскладка RU, то и на экране блокировки при вводе
пароля будет эта же раскладка вместо дефолтной системной EN.

Хочу запускать скрипт для смены раскладки клавиатуры на английский язык при блокировке
экрана, чтобы при вводе пароля не отслеживать, на каком языке его набираю. Надоело,
т. к. в день вводить пароль приходится десятки раз. Скрипт такой:

#!/bin/sh
kbd=`setxkbmap -print | sed -n 's#xkb_symbols[^"]*"\([^"]*\)".*$#\1#p' | awk -F+
'{print $2}'`
   if [ $kbd != us ]; then
    xdotool key 'alt+shift'
   fi


В скрипте выполняется проверка и меняется раскладка на EN.

А может у кого-нибудь есть решение по исправлению данного бага и при блокировке экрана
по-умолчанию можно сделать английский язык.

Ubuntu 15.04.
    


Ответы

Ответ 1



Сделал так: Вариант 1 (проверка по наличию процесса lockscreen) Создал скрипт cat ~/scripts/enru.sh #!/bin/bash CHKSTR=`ps aux| grep -v grep | grep lockscreen` if [[ $CHKSTR == *lockscreen* ]]; then kbd=`setxkbmap -print | sed -n 's#xkb_symbols[^"]*"\([^"]*\)".*$#\1#p' | awk -F+ '{print $2}'` if [[ $kbd == ru ]]; then xdotool key 'alt+shift' fi fi Добавил в crontab от имени пользователя строку crontab -u USERNAME -e * * * * * DISPLAY=:0 bash ~/scripts/enru.sh >/dev/null 2>/dev/null Скрипт каждую минуту проверяет, запущен ли процесс usr/lib/unity/unity-panel-service --lockscreen-mode и, при его наличии, запускает проверку и изменение раскладки клавиатуры. Уверен, что можно сделать более красиво - предлагайте варианты. Вариант 2 (запуск при нажатии Ctrl+Alt+L) Создал скрипт $ cat ~/scripts/enru2.sh #!/bin/bash gnome-screensaver-command --lock && gsettings set org.gnome.desktop.input-sources current 0 # current 0 говорит о том, что нужно включить дефолтную раскладку en_EN. current 1, соответственно, ru_RU Проверяем, есть ли у нас дополнительные комбинации клавиш, которые мы уже используем: $ gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings ['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/'] custom0 говорит о том, что одна комбинация уже добавлена, поэтому надо добавить следующую - custom1: $ gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']" Если же вы добавляете свою первую комбинацию клавиш, то выполните команду $ gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']" Отключаем хоткеи для системного lockscreen'а: $ gsettings set org.gnome.settings-daemon.plugins.media-keys screensaver '' Задаём имя нашему хоткею: $ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ name 'Lockscreen' Указываем, какую команду надо выполнять: $ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ command "/home/$USER/scripts/enru2.sh" Задаём комбинацию клавиш для запуска блокировки экрана: $ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ binding 'l'

суббота, 21 декабря 2019 г.

cron и несколько одновременных заданий

#linux #cron


Если я поставлю в cron две задачи на исполнение в одно и тоже время, то как они будут
запущены на выполнение (и выполняться): параллельно или поочередно (вторая выполнится
после первой)?
    


Ответы

Ответ 1



Если задачи описаны в crontab в разных строках то они будут выполнятся независимо друг от друга, в том числе и параллельно, при совпадении времени. Если надо, что бы две задачи выполнились строго друг за другом то можно написать их в одну строку, разделив точкой с запятой: 01 12 * * * mike task1 parameters; task2 parameters; ... Кроме того, если к времени своего следующего старта предыдущий экземпляр задачи еще не завершился, крон не будет ничего проверять и запустит вторую копию. Отслеживание параллельного запуска и препятствование этому остается на совести самой выполняемой задачи.

четверг, 19 декабря 2019 г.

Выполнение php скрипта по расписанию без CRON

#cron #php


Всем привет, помогите пожалуйста решить задачу, на сайте есть еженедельный конкурс,
каждый понедельник в 0:00 он должен начинаться, а каждое воскресенье в 23:59(или если
возможно в 0:00), завершаться, и сразу после начисления приза начинался опять? Но вот
как запускать php скрипт каждый понедельник в 0:00 без CRON, я не знаю... Подскажите
пожалуйста решение проблемы.    


Ответы

Ответ 1



cron online, указываете ссылку на файл на своем ресурсе, который надо дергать в нужное время, ну и указываете время.

Ответ 2



пробовал выше указанный ресурс(http://mywebcron.com), там выдал ошибку Some thing gone wrong! General error. нашел вот эту: https://www.easycron.com вроде этот все отработал супер! также есть еще один https://crondash.com

четверг, 28 ноября 2019 г.

Как в линуксе запускать команду по расписанию автоматически (мне нужно каждые 15 минут)?

#linux #cron #cron_faq


Как в линуксе запускать команду по расписанию автоматически (мне нужно каждые 15 минут)?
    


Ответы

Ответ 1



удобнее всего это делать с помощью cron-задания. cron-задания хранятся отдельно для каждого пользователя (включая root-а), файл с такими заданиями называется crontab (cron table), каждая незакомментированная строка — отдельное задание. чтобы отредактировать свой персональный crontab, пользователю надо выполнить команду: $ crontab -e допустим, вам необходимо каждые 15 минут выполнять команда аргумент1 аргумент 2. для этого добавьте в crontab строку: */15 * * * * команда аргумент1 аргумент2 первые пять полей относятся к регулярности запуска и означают: «каждые 15 минут каждый час каждый день каждого месяца в каждый день недели» подробнее про этот файл можно почитать в справке: $ man 5 crontab о программе crontab: $ man 1 crontab и о демоне cron, который, собственно, и выполняет задания: $ man cron напоминание: некоторые реализации программы cron не поддерживают синтаксис */число, и вместо */15 следует использовать более совместимое 0,15,30,45. за уточнением обратитесь к упомянутой документации по формату файла crontab в вашей системе.

Ответ 2



В файле cron пишем следующую строку: 0,15,30,45 * * * * /path/to/command Где /path/to/command путь до скрипта, который нужно запускать Что у вас рулит кроном зависит от дистрибутива. По-моему на Убунте команда для редактирования правил cron выглядит так: $ sudo crontab -e

Ответ 3



У Systemd есть такой юнит, как .timer. Можете попробовать с его помощью.

понедельник, 15 июля 2019 г.

/etc/cron.daily/logrotate error

После установки vps с debian 7 и isp manager каждый день ночью приходит такой отбойник на почту:
/etc/cron.daily/logrotate: run-parts: failed to exec /etc/cron.daily/logrotate: Exec format error run-parts: /etc/cron.daily/logrotate exited with return code 1
В задачах для крона ничего связанного с logrotate нет, файл /etc/cron.daily/logrotate — пуст.


Ответ

ошибку можно воспроизвести, если в каталоге, переданном программе run-parts в качестве аргумента, присутствует пустой файл с битами исполнимости:
$ touch file $ run-parts . $ chmod +x file $ run-parts . run-parts: failed to exec ./file: Exec format error run-parts: ./file exited with return code 1
решение: удалить этот пустой файл или хотя бы убрать биты исполнимости:
$ sudo chmod -x /путь/к/файлу

В задачах для крона ничего связанного с logrotate нет
скрипты из /etc/cron.daily выполняет программа run-parts, запускаемая ежедневно программой crond благодаря наличию соответствующей строчки в /etc/crontab

суббота, 6 июля 2019 г.

Cron запуск Ruby скрипта

Добавляю в crontab */1 * * * * root ruby /home/www/admin/cron.rb В syslog Apr 30 13:01:01 cs10433 /USR/SBIN/CRON[5448]: (root) CMD (ruby /home/www/admin/cron.rb) Apr 30 13:01:01 cs10433 /USR/SBIN/CRON[5447]: (CRON) error (grandchild #5448 failed with exit status 127) Как заставить cron выпаолнять скрипТ?


Ответ

Код выхода 127 - это ошибка "command not found". Либо шелл не видит ruby, либо в скрипте вы вызываете команду, которую не видит шелл.

суббота, 15 июня 2019 г.

Запустить скрипт только один раз?

В общем ситуация такая. Есть скрипт, который может работать в некоторых редких случаях больше чем интервал в cronjob, но запускать его при этом нужно каждую минуту, так как в 95% случаев он отрабатывает за несколько секунд. Нужно исключить возможность повторного запуска. Сразу оговорюсь, это бесплатный хостинг, поэтому SSH доступа нет, и мониторить процессы не получается. Остаётся лишь реализовать это средствами PHP
Пробовал так
//Статический файл который будет хранить имя временного файла $lockFilename = __DIR__ . '/lock.dat';
//Проверяем существует ли временный файл if (file_exists($lockFilename) && ($lock = file_get_contents($lockFilename)) && file_exists($lock)) { echo "Cron running now {$lock}
"; exit(); }
//Файл должен умереть при закрытии дескриптора $tmpHandle = tmpfile();
//Получаем имя временного файла $metaData = stream_get_meta_data($tmpHandle);
//Записываем имя временного файла в статический файл file_put_contents($lockFilename, $metaData['uri']);
//Cron симуляция echo "Cron started
";
sleep(20);
echo "Cron stopped
"; exit();
Но файл остаётся, если прервать скрипт через Ctrl+C
Думал решить задачу через memcache и время жизни ключа, но обратно таки бесплатный хостинг не предоставляет memcache в распоряжение


Ответ

Вариант с блокировкой файла:
$fp = fopen("lock", "w+");
if (flock($fp, LOCK_EX | LOCK_NB)) { // выполняем блокировку
/* * Тут код который нужно выполнить */
flock($fp, LOCK_UN); // отпираем файл } else { echo "Не удалось получить блокировку, файл уже заблокирован!"; }
fclose($fp); unlink("lock");

Вариант с обработкой сигналов:
declare(ticks = 1); // включить обработку сигнала
function sigint() {
exit();
} pcntl_signal(SIGINT, 'sigint'); pcntl_signal(SIGTERM, 'sigint');
/* * Тут код который нужно выполнить */

пятница, 26 апреля 2019 г.

Аналог CRON в android приложении

Необходимо, чтобы приложение запускалось каждые пол-часа и проверяло обновления.
Через какой механизм это можно реализовать? Нужно что-то вроде CRON.


Ответ

AlarmManager обеспечивает доступ к сервису планировки задач Android. Он регистрирует в системе интент и когда наступает обозначенное время запускает этот интент. Если момент вызова приложение закрыто, то оно будет вновь запущено.