Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Общий по Linux » Suse/OpenSuSE - [решено] Выполнение задания в CRON

Ответить
Настройки темы
Suse/OpenSuSE - [решено] Выполнение задания в CRON

Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день, Уважаемые.
Ситуация следующая: есть серв SLES12 с Squid+SquidGuard+Sarg, непонятна ситуация с работой Cron - как понять, какие задания были выполнены и где они прописаны?
Есть в /etc/ каталоги cron.daily cron.weekly cron.monthly, в каждом каталоге лежит отдельный скрипт. В корне /etc/ лежит crontab, который, если я правильно понял, и управляет скриптами, но в этом кронтабе только одна строчка
Скрытый текст
-*/15****root test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1


Содержание RUN-CRONS


Скрытый текст
#!/bin/bash
#
# /usr/lib/cron/run-crons
#
# Copyright (c) 1998-2001 SuSE GmbH Nuernberg, Germany. All rights reserved.
#
# this script looks into /etc/cron.{hourly,daily,weekly,monthly} for
# scripts to be executed. The info about last run is stored in
# /var/spool/cron/lastrun
#
# concept similar to debian and redhat
#
# Changes:
# 1998 - Burchard Steinbild <bs@suse.de>, 1998
# initial version
# before 2001 - va@org.chemie.uni-frankfurt.de
# send an email with name of date-script instead of cron entry
# "Subject: cronjob@www - daily - FAILURE"
# (better one script for each date-sub-script)
# requires changes to /etc/crontab
# append > /dev/null 2>&1 to the line calling run-cons
# 2001-09-11
# updated to Suse 7.2 merged
# 2001-09-12
# changed FAILURE detection, until now all scripts with output
# had "failed", now only scripts with error status != 0
# have failed.
# 2001-09-13 - ro@suse.de
# merged with 7.3: call logger with exit value for scripts
# respect MAILTO as cron does
# use mktemp -d for all tmpfiles
# add variable to disable mail if all jobs returned 0
#

#
# Don't run jobs on laptops, that are AC-offline
#
if test -x /usr/bin/on_ac_power ; then
on_ac_power -q
if [ "$?" = "1" ]; then
exit 0
fi
fi

if [ -f /etc/sysconfig/cron ]; then
. /etc/sysconfig/cron
fi

BASENAME=`/usr/bin/basename $0`
LOGGER="/bin/logger -t $BASENAME[$$]"

export LC_TIME=POSIX
TMPDIR=`mktemp -d /tmp/run-crons.XXXXXX`
trap "rm -rf $TMPDIR" 0 1 2 3 13 15

# We will force to run cron.daily after 14 days, even
# if you set MAX_NOT_RUN in /etc/sysconfig/cron
# value is in minutes
MAX_NOT_RUN_FORCE="20160"

# Priority change for sub scripts.
# range: highest -20 ... 19 lowest prioriy
# default processes start in level 10
CRON_SCRIPT_NICE_VALUE=15
SPOOL=/var/spool/cron/lastrun

# CRON Result EMail is sent to
if test -z "$MAILTO" ; then
SEND_TO="root"
else
SEND_TO="$MAILTO"
fi

mkdir -p $SPOOL

#set verbose
## stage 1, search directories/scripts to run
RUN=""
for CRONDIR in /etc/cron.{hourly,daily,weekly,monthly} ; do
test -d $CRONDIR || continue
BASE=${CRONDIR##*/}
TIME_EXT=${BASE##cron.}

test -e $SPOOL/$BASE && {
case $BASE in
cron.hourly) TIME="-cmin +60 -or -cmin 60" ;;
cron.daily)
# if DAILY_TIME set, run only at a fixed time of day
if [ "$DAILY_TIME" != "" ] ; then
DAILY_TIME_NEW="`echo $DAILY_TIME | sed s,:,, | sed s,^0\*,, `"
test -z "$DAILY_TIME_NEW" && DAILY_TIME_NEW=0
if [ "$DAILY_TIME_NEW" -gt "2359" ] ; then
echo "wrong time format in /etc/sysconfig/cron DAILY_TIME, value is $DAILY_TIME" | logger
fi
NOW_H=`date +%H%M| sed s,^0\*,,`
test -z "$NOW_H" && NOW_H=0
if [ $DAILY_TIME_NEW -gt $(($NOW_H-15)) ] && [ $DAILY_TIME_NEW -le $NOW_H ]; then
TIME=""
else
# take care of MAX_NOT_RUN, default is 7 days
if [ "$MAX_NOT_RUN" != "0" ] ; then
TIME="-cmin +$((1440*$MAX_NOT_RUN)) -or -cmin $((1440*$MAX_NOT_RUN))"
else
TIME="-cmin +$MAX_NOT_RUN_FORCE -or -cmin $MAX_NOT_RUN_FORCE"
fi
fi

# run as usual
else
TIME="-cmin +1440 -or -cmin 1440"
fi ;;
cron.weekly) TIME="-cmin +10080 -or -cmin 10080" ;;
cron.monthly)
DAYOFMONTH=`date '+%d'`
DAYSLASTMONTH=`date -d "-$DAYOFMONTH days" '+%d'`
if [ $DAYOFMONTH -gt $DAYSLASTMONTH ] ; then
LASTMONTHSTR="-$DAYOFMONTH days"
else
LASTMONTHSTR="last month"
fi
NOW=`date +%s`
LASTMONTH=`date -d "$LASTMONTHSTR" +%s`
DIFF=`expr '(' $NOW - $LASTMONTH ')' / 86400`
TIME="-ctime +$DIFF"
;;
esac
# remove all lock files for scripts that are due to run
eval find $SPOOL/$BASE $TIME | \
xargs --no-run-if-empty rm
}
if test ! -e $SPOOL/$BASE ; then
# accept this dir, if it isn't empty
LIST=`find $CRONDIR ! -type d`
if [ ! -z "$LIST" ] ; then
RUN="${RUN} ${TIME_EXT}"
fi
fi
done


## STATUS communication variable between
# function run_scripts ()
# and loop-over-all-scripts
# set in run_scripts to FAILURE if this script failed!
# else it is empty
# because it is never reset to empty after the initialization
# it implements an OR like logic over all scripts
##
STATUS=""

# helper, run all scripts in one cron directory
function run_scripts (){
local CRONDIR=$1
local TIME_EXT=$2


local TEMP_MSG=$TMPDIR/run-crons.${TIME_EXT}.$$
rm -r $TMPDIR/run-crons.${TIME_EXT}.* >/dev/null 2>&1

# keep going when something fails
set +e
for SCRIPT in $CRONDIR/* ; do
test -d $SCRIPT && continue
case "$SCRIPT" in
.svn) continue ;;
*.rpm*) continue ;;
*.swap) continue ;;
*.bak) continue ;;
*.orig) continue ;;
\#*) continue ;;
*~) continue ;;
esac
/sbin/checkproc $SCRIPT && continue
if test -x $SCRIPT ; then
BASESCRIPT=`/usr/bin/basename $SCRIPT`

nice -n ${CRON_SCRIPT_NICE_VALUE} $SCRIPT >$TEMP_MSG 2>&1

local ERRNO=$?
if [ 0 -eq $ERRNO ] ; then
if [ "$SYSLOG_ON_NO_ERROR" = "yes" ]; then
echo "$BASESCRIPT: OK" | $LOGGER -p info
fi
else
echo "$BASESCRIPT returned $ERRNO" | $LOGGER -p warn
echo "SCRIPT: $BASESCRIPT exited with RETURNCODE = $ERRNO."
STATUS="FAILURE"
fi
# write some wrapper text around the original output
if [ -s "$TEMP_MSG" ] ; then
echo "SCRIPT: output (stdout && stderr) follows"
echo ""
cat $TEMP_MSG
echo -e "SCRIPT: $BASESCRIPT\n------- END OF OUTPUT"
echo ""
echo ""
fi

rm -f $TEMP_MSG > /dev/null 2>&1
else
echo "WARNING: $SCRIPT is not executable, script is ignored !"
fi
done
}

# stage 2:
# run all scripts and collect output into one mail
# for each TIME_EXT with a meaningfull subject.
#
if [ ! -z "${RUN}" ] ; then
for EXT in ${RUN} ; do
CRONDIR="/etc/cron."${EXT}
test -d $CRONDIR || continue
BASE=`/usr/bin/basename $CRONDIR`
TIME_EXT=${BASE##cron.}
STATUS=""

if test ! -e $SPOOL/$BASE ; then
CONTROL_MAIL=$TMPDIR/run-crons_mail.$$
JOB_OUTPUT=$TMPDIR/run-crons_output.$$

echo "running ${TIME_EXT} cronjob scripts" >> ${CONTROL_MAIL}
echo "" >> ${CONTROL_MAIL}

touch $SPOOL/$BASE

run_scripts ${CRONDIR} ${TIME_EXT} >> ${JOB_OUTPUT} 2>&1
TITLE="cronjob@$HOSTNAME - ${TIME_EXT}"
if [ -n "${STATUS}" ] ; then
TITLE="${TITLE} - ${STATUS}"
else
TITLE="${TITLE} - OK"
fi
if [ -n "${STATUS}" -o "$SEND_MAIL_ON_NO_ERROR" = "yes" ] ; then
cat ${CONTROL_MAIL} ${JOB_OUTPUT} | mail ${SEND_TO} -s "${TITLE}"
elif [ -s ${JOB_OUTPUT} -a "$SEND_OUTPUT_ON_NO_ERROR" = "yes" ] ; then
cat ${CONTROL_MAIL} ${JOB_OUTPUT} | mail ${SEND_TO} -s "${TITLE}"
fi

rm -f ${CONTROL_MAIL} ${JOB_OUTPUT}
fi
done
fi

#
# now make sure, we have no lastrun files dated to future
#
touch $SPOOL
NOW=`date -u +%s`
for i in `find $SPOOL -type f`
do
FILEDATE=`date -u -r $i +%s`
# allow for up to one hour in the future because of summer/wintertime
if [ $((FILEDATE - NOW)) -gt 3600 ]
then
rm $i
fi
done


Прошу помочь разобраться.

Отправлено: 09:42, 01-07-2015

 

Аватара для ruslandh

info man howto


Сообщения: 6958
Благодарности: 384

Профиль | Сайт | Отправить PM | Цитировать


Так логи должны на почту приходить

Какие задания лежат в каталогах, помимомо скриптов, такие и выполнятся. Их надо или самому положить, или из rpm кладутся. Ну или использовать crontab -e

Отправлено: 09:52, 01-07-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Дело в том, что для SARG не формируется отчет. Каталоги создались, а отчета нет, поэтому и не понятно, выполняется скрипт отчета или нет.

Отправлено: 10:00, 01-07-2015 | #3


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Запустил скрипт SARG вручную и он отработал, получается на автомате не срабатывает?

Отправлено: 10:19, 01-07-2015 | #4


Аватара для ruslandh

info man howto


Сообщения: 6958
Благодарности: 384

Профиль | Сайт | Отправить PM | Цитировать


Сам crontab должен отсылать отчёт о запуске задания. Возможно он root его посылает.

Отправлено: 10:44, 01-07-2015 | #5


Аватара для ruslandh

info man howto


Сообщения: 6958
Благодарности: 384

Профиль | Сайт | Отправить PM | Цитировать


Ну, положит ссылку на ваш скрипт в какуб-то из этих папок.

-------
Поспешай не торопясь


Отправлено: 20:18, 01-07-2015 | #6


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата ruslandh:
Ну, положит ссылку на ваш скрипт в какуб-то из этих папок. »
В том то и дело, что я скрипт выполняю из каталога cron.daily

Отправлено: 09:55, 02-07-2015 | #7


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Похоже что crontab вообще не работает:
Скрытый текст
linux:~ # crontab -l
no crontab for root

Хотя:
l
Скрытый текст
inux:~ # service cron status
cron.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/cron.service; enabled)
Active: active (running) since Thu 2015-07-02 11:41:28 MSK; 23min ago
Main PID: 22957 (cron)
CGroup: /system.slice/cron.service
`-22957 /usr/sbin/cron -n

Jul 02 11:41:28 linux cron[22957]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 97% if used.)
Jul 02 11:41:28 linux cron[22957]: (CRON) INFO (running with inotify support)
Jul 02 11:41:28 linux cron[22957]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
Jul 02 11:45:01 linux cron[23198]: pam_unix(crond:session): session opened for user root by (uid=0)
Jul 02 11:45:01 linux cron[23199]: pam_unix(crond:session): session opened for user root by (uid=0)
Jul 02 11:50:01 linux cron[23378]: pam_unix(crond:session): session opened for user root by (uid=0)
Jul 02 11:55:01 linux cron[23561]: pam_unix(crond:session): session opened for user root by (uid=0)
Jul 02 12:00:01 linux cron[23721]: pam_unix(crond:session): session opened for user root by (uid=0)
Jul 02 12:00:01 linux cron[23722]: pam_unix(crond:session): session opened for user root by (uid=0)

Как исправить?

Отправлено: 12:02, 02-07-2015 | #8


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Разобрался. Если имеется файл crontab это еще не значит, что задания выполняются. Чтобы задания из crontab выполнялись, его нужно "привязать" к пользователю, поэтому просто редактируем файл crontab и после в терминале:
#crontab crontab
Наш файл crontab будет выполняться под текущим пользователем и будет иметь вывод (например для запуска free-sa:
Скрытый текст
linux:~ # crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.0218bT installed on Thu Jul 2 13:10:48 2015)
# (Cronie version 4.2)
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root
#
# check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
#
#-*/15 * * * * root test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1
0 18 * * 1,2,3,4,5 root /etc/cron.daily/suse.de-free-sa

Отправлено: 13:42, 02-07-2015 | #9


Аватара для ruslandh

info man howto


Сообщения: 6958
Благодарности: 384

Профиль | Сайт | Отправить PM | Цитировать


Я - же вам сказал - используйте
crontab -e

-------
Поспешай не торопясь


Отправлено: 14:06, 02-07-2015 | #10



Компьютерный форум OSzone.net » Linux и FreeBSD » Общий по Linux » Suse/OpenSuSE - [решено] Выполнение задания в CRON

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Suse/OpenSuSE - Cron "забывает" задания Spaser Общий по Linux 2 12-11-2014 09:07
Debian/Ubuntu - Не работают задания в cron aza99 Общий по Linux 1 30-05-2013 13:41
Разное - [решено] Как отключить выполнение пропущенного задания после выхода из спящего режима pois22ple Microsoft Windows 7 11 14-12-2012 13:46
Разное - Планировщик заданий, отсутствие задания и его выполнение... Vladskiy Microsoft Windows 7 1 19-09-2012 11:41
FreeBSD - cron во freenas не хочет выполять задания по расписанию mitiya Общий по FreeBSD 8 10-03-2010 23:14




 
Переход