INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram Email / GIT / RSS / GPG

gogocron – one second cron daemon

№ 9641 В разделе Sysadmin от December 12th, 2018,
В подшивках: , ,

After unsuccessful searches of same featured cron daemon I wrote it myself.

Features

  • 1 second minimal interval
  • 10 ms precision
  • run command as other user
  • batch of commands
  • timeout for whole task
  • your own ENV variables
  • traditional crontab syntax

https://git.blindage.org/21h/gogocron

Нет комментариев »

Cron inside your Docker image with python app

№ 9577 В разделе Sysadmin от November 25th, 2018,
В подшивках: ,

At first, create your cron file with usual crontab lines and name it mycrontab_lines

*/5 * * * * /app/cron_script.sh

Now create your cron_script.sh

#!/bin/bash
# load env variables
source /etc/profile
. ~/.profile

python3 /app/mycronapp.py

Ok, you ready now to create Dockerfile like this:

FROM python:3

# install cron service
RUN    apt-get ${APT_FLAGS_COMMON} update && \
    apt-get ${APT_FLAGS_PERSISTENT} -y install cron && \
    apt-get ${APT_FLAGS_COMMON} autoremove && \
    apt-get ${APT_FLAGS_COMMON} clean && \
    rm -rf /var/lib/apt/lists/*

# bla bla bla copy app.py
WORKDIR /app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# install python app
COPY app.py .
COPY mycronapp.py .

# make cron
COPY mycrontab_lines .
COPY cron_script.sh .
RUN chmod 0755 run_previewer.sh
RUN chmod 0644 mycrontab_lines
RUN crontab mycrontab_lines

# start cron service before start blocking application
CMD service cron start && \
    python ./app.py

Build and run container.

Нет комментариев »

Улучшение отчетов cron для почты

№ 7311. В разделе Sysadmin от June 17th, 2015

В подшивках: ,

Как отучить cron слать письма

№ 2122 В разделе Sysadmin от May 25th, 2010,
В подшивках: ,

Есть некая переменная MAILTO, которая пишется перед заданием и содержит адреса для засыла письма с отчетом. Если она пустая MAILTO="", то письмо с отчетом не придет. Например,

MAILTO="reports@blindage.org"
0 * * * * /etc/init.d/httpd graceful

Нет комментариев »

Запуск cron задания с проверкой на копии

№ 2089 В разделе Sysadmin от April 23rd, 2010,
В подшивках: ,

На одном из моих серверов появилась небольшая проблема с производительностью – некоторые задания в cron не успевали завершиться прежде, чем запустится новое. Скрипт предельно прост и предназначет исключительно для предотвращения запуска копии программы. В качестве бонуса ведется сбор информации какой cron когда запущен и закончен.

Вариант №1 Штатной программой flock из Ubuntu

Не даст запустить вторую копию
root@boroda:~# flock -xn /run/lock/mc.lock -c mc

Даст запустить вторую копию, будет ждать пока уже запущенное задание не отработает
root@boroda:~# flock -x /run/lock/mc.lock -c mc

Options:
 -s, --shared             get a shared lock
 -x, --exclusive          get an exclusive lock (default)
 -u, --unlock             remove a lock
 -n, --nonblock           fail rather than wait
 -w, --timeout      wait for a limited amount of time
 -E, --conflict-exit-code   exit code after conflict or timeout
 -o, --close              close file descriptor before running command
 -c, --command   run a single command string through the shell
     --verbose            increase verbosity

Вариант №2 Мой костыль

#!/bin/sh

NAME=$1
CMD=$2
LOGDIR="/var/cronlogs"

if [ -f /run/lock/$NAME.lock ]; then
echo $NAME " still works!"
else
touch /run/lock/$NAME.lock
echo "Started "$NAME" at" `date` >> $LOGDIR/$NAME.txt
$CMD
echo "Finished "$NAME" at" `date` >> $LOGDIR/$NAME.txt
rm /run/lock/$NAME.lock
fi

Как им пользоваться: run_cron.sh my_super_task /usr/bin/my_super_program

Первый параметр это название cron таска, второй параметр является непосредственно командой. Если команда состоит из пробелов и прочих спец символов, то следует применить кавычки и символы экранирования.

6 комментариев »

Яндекс.Метрика

Fortune cookie: Q: What's the difference between Bell Labs and the Boy Scouts of America? A: The Boy Scouts have adult supervision.