|
Компьютерный форум OSzone.net » Linux и FreeBSD » Общий по Linux » Suse/OpenSuSE - [решено] Выполнение задания в CRON |
|
|
Suse/OpenSuSE - [решено] Выполнение задания в CRON
|
Новый участник Сообщения: 15 |
Добрый день, Уважаемые.
Ситуация следующая: есть серв 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 |
info man howto Сообщения: 6958
|
Профиль | Сайт | Отправить PM | Цитировать Так логи должны на почту приходить
Какие задания лежат в каталогах, помимомо скриптов, такие и выполнятся. Их надо или самому положить, или из rpm кладутся. Ну или использовать crontab -e |
Отправлено: 09:52, 01-07-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Дело в том, что для SARG не формируется отчет. Каталоги создались, а отчета нет, поэтому и не понятно, выполняется скрипт отчета или нет.
|
Отправлено: 10:00, 01-07-2015 | #3 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Запустил скрипт SARG вручную и он отработал, получается на автомате не срабатывает?
|
Отправлено: 10:19, 01-07-2015 | #4 |
info man howto Сообщения: 6958
|
Профиль | Сайт | Отправить PM | Цитировать Сам crontab должен отсылать отчёт о запуске задания. Возможно он root его посылает.
|
|
Отправлено: 10:44, 01-07-2015 | #5 |
info man howto Сообщения: 6958
|
Профиль | Сайт | Отправить PM | Цитировать Ну, положит ссылку на ваш скрипт в какуб-то из этих папок.
|
------- Отправлено: 20:18, 01-07-2015 | #6 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Цитата ruslandh:
|
|
Отправлено: 09:55, 02-07-2015 | #7 |
Новый участник Сообщения: 15
|
Профиль | Отправить 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
|
Профиль | Отправить 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 |
info man howto Сообщения: 6958
|
Профиль | Сайт | Отправить PM | Цитировать Я - же вам сказал - используйте
crontab -e |
------- Отправлено: 14:06, 02-07-2015 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|