Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Скрипт не работает через cron  (Прочитано 12736 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sla237

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Скрипт не работает через cron
« : 19 Ноября 2008, 07:48:31 »
Все ниже следующее на Ubuntu server 8.04.
Написал на баше скрипт, который архивирует данные и заливает архив на удаленную машину по самбе.
скопировал в /usr/bin
Запускаю: sudo backup
Скрипт работает, пишет сообщения, пишет в лог. Все нормально. Архив порядка полутора гигабайт.
Делаю sudo crontab -e (или указываю -u root, не имеет значения. все равно проблема остается)
пишу
30 4 * * * backup
(т.е. на 4:30 утра каждый день )
Скрипт запускается, делает архив в ~360 кб и все.  Лог обрывается на "Trying to TAR "/" "
В архиве только /usr с несколькими файлами. (а должен быть весь /)

Что это может быть? почему скрипт нормально работает при ручном запуске, но глючит в кроне?

Сам скрипт:  (юзайте кому нужно, если что :))


#!/bin/sh

#Скрипт делает бекап на локальной машине и заливает его на самба шару удаленного компьютера


ver=0.11a # Версия

backup=/ #что бекапить?
arcname=`date --rfc-3339=date`.tar.gz     #имя файла
arcpath=/backup #куда делать бекап на локальной машине
logpath=$arcpath/log.txt

user=user #логин нетбиос
pwd=pwd #пароль нетбиос
netpath=//192.168.0.1/share/  # путь куда класть бекапы
netlocalpath=backups # в какую папку класть бекапы на шаре


log ()
{
echo [`date +%D\ %R`] $1 "\n"
echo [`date +%D\ %R`] $1 "\n" >> $logpath
}
echo ====================================================  "\n" >> $logpath
log "Script (v. $ver) started on machine \"`hostname`\". Trying to TAR \"$backup\" "


quit ()
{
log "BACKUP NOT CREATED"
exit 0
}

if !(test -e $backup )
then
log "Path incorrect: \"$backup\""
quit
fi


if !(test -e $arcpath )
then
log "Path incorrect: \"$arcpath\""
quit
fi

if tar --exclude=$arcpath -czvf $arcpath/$arcname $backup
then
fsz=`ls -sh $arcpath/$arcname`
pos=`expr index "$fsz"  " "`
fsz=`expr substr "$fsz" 1 $pos`
log "Archiving successfull, file size: $fsz  Backup created at: \"$arcpath/$arcname\""
else
log "Some error occured while archiving [Warning!]"
fi

log "Transfering backup and log to \"$netpath\""

if smbclient $netpath -U $user -password $pwd -c "cd $netlocalpath; lcd $arcpath; prompt; recurse; mput $arcname;mput log.txt exit;"
then
log "Transfer successfull"
log "All ok, shutdown script"
smbclient $netpath -U $user -password $pwd -c "cd $netlocalpath; lcd $arcpath;prompt;mput log.txt; exit"
else
log "Transfer FAILED"
fi

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #1 : 19 Ноября 2008, 14:30:41 »
Полный путь прописать не пробовал?

Оффлайн Sla237

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #2 : 20 Ноября 2008, 02:11:11 »
Полный путь прописать не пробовал?
Где конкретно я должен прописать полный путь?
И как это связано с обычным запуском, и кроном?

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #3 : 20 Ноября 2008, 14:08:45 »
Никак. Туплю.

Оффлайн Sla237

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #4 : 24 Ноября 2008, 09:16:52 »
Народ, ну что, вообще ни у кого мыслей на этот счет нету?
Тут подсказали что проблема может быть в том что запускается без терминала. но как запустить в терминале и кроном - я незнаю.
Может это поможет?

burgua

  • Гость
Re: Скрипт не работает через cron
« Ответ #5 : 24 Ноября 2008, 09:31:46 »
А прав хватает?
Скрипт вообще запускается? (echo какое-то вставь или вообще накидай вывод месседжей, чтобы увидеть, где проблема)

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #6 : 24 Ноября 2008, 10:13:08 »
Народ, ну что, вообще ни у кого мыслей на этот счет нету?
Тут подсказали что проблема может быть в том что запускается без терминала. но как запустить в терминале и кроном - я незнаю.
Может это поможет?
После этого сообщения...
(Я тут гаданием занимаюсь) Может нужно перенаправлять вывод всех команд в файлы (либо в /dev/null)? Потому что после "Trying to TAR "/" " запускается tar аж c -v, который генерит не слабое количество информации, а если в кроне буфер как-то ограничен...

Оффлайн Sla237

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #7 : 25 Ноября 2008, 02:45:38 »
Народ, ну что, вообще ни у кого мыслей на этот счет нету?
Тут подсказали что проблема может быть в том что запускается без терминала. но как запустить в терминале и кроном - я незнаю.
Может это поможет?
После этого сообщения...
(Я тут гаданием занимаюсь) Может нужно перенаправлять вывод всех команд в файлы (либо в /dev/null)? Потому что после "Trying to TAR "/" " запускается tar аж c -v, который генерит не слабое количество информации, а если в кроне буфер как-то ограничен...
Пробовал отключить все эхи в скрипте. И из tar  убирал параметр v.
Прогресс есть, но маленький. Архив уже получается на 120 метров. А должен быть 1.5 гиговый :)
tar > /dev/null тоже пробовал - не помогло. (то ли файл не создался, то ли просто ничего не изменилось - точно не скажу. два дня назад делал - непомню :) но в итоге - не помогло)

Еще у кого какие мысли?

Оффлайн Sla237

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #8 : 03 Апреля 2009, 04:47:46 »
Для будущих поколений:

Проблема решилась. Оказалось что даже при tar ... >> dev/null - в stdout валятся сообщения об ошибках.
Решение: использовать конструкцию tar ... >> /dev/null 2>&1
После этого все замечательно работает в cron'е.
« Последнее редактирование: 03 Апреля 2009, 04:55:12 от Sla237 »

Оффлайн ziablik

  • Активист
  • *
  • Сообщений: 354
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #9 : 03 Апреля 2009, 05:06:27 »
поставь для интерса из репозитария пакет sbackup
зачем изобретать велосипед когда все уже есть

Оффлайн Sla237

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #10 : 09 Апреля 2009, 10:35:27 »
поставь для интерса из репозитария пакет sbackup
зачем изобретать велосипед когда все уже есть
А таким образом убивается сразу два зайца. И польза и учеба. Иначе откуда бы я узнал что крон падает когда его буфер переполняется, и что он, буфер - ограничен? :)

Но за наводку спасибо, посмотрю этот пакет.

Оффлайн fatjoe

  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #11 : 23 Сентября 2009, 15:19:32 »
Через поиск нашел эту тему. Была похожая проблема. Решилось все удачно, благодаря tar ... >> /dev/null 2>&1
Выкладываю другой скрипт, вдруг пригодится:
#!/bin/bash
#backup.sh
backupFS="/home /var /etc"
backupTO=/home/backup
timestamp=`date +%Y-%m-%d-%H-%M`
KeepTime=7
if [ -d $backupTO ];
then
find $backupTO -maxdepth 1 -name \*.tar.gz -mtime +${KeepTime} -exec rm -f {} \;
for i in $backupFS
do
j=`expr ${i//\//-}`
echo $j
tar -zcvf $backupTO/`hostname`.${timestamp}${j}.tar.gz $i >> /dev/null 2>&1
echo “$i is done”
done
else
echo “backup directory is missing...exiting”
exit 1
fi

p.s. sbackup тоже ничего, понравился.

Оффлайн cOnf_ua

  • Новичок
  • *
  • Сообщений: 47
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #12 : 12 Ноября 2009, 16:27:57 »
Вопрос относительно последнего скрипта, что означает эта конструкция:

j=`expr ${i//\//-}`

чем значение переменной $j отличается от $i?

Оффлайн fatjoe

  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #13 : 12 Ноября 2009, 16:33:09 »
Вопрос относительно последнего скрипта, что означает эта конструкция:

j=`expr ${i//\//-}`

чем значение переменной $j отличается от $i?
Без понятия. Использую как есть. И результатом доволен.

Оффлайн dmig

  • Старожил
  • *
  • Сообщений: 1668
    • Просмотр профиля
Re: Скрипт не работает через cron
« Ответ #14 : 12 Ноября 2009, 16:52:07 »
Делаю sudo crontab -e (или указываю -u root, не имеет значения. все равно проблема остается)
удивительно, что так работает...
сталкивался с такой проблемой, только причина была в том, что cron проверяет, не залочена ли учётная запись -- если да, пользовательский crontab он не выполняет. решил переносом в /etc/crontab

 

Страница сгенерирована за 0.038 секунд. Запросов: 25.