Мне нужен совет, так как Cron сводит меня с ума на моем компьютере с Fedora 8.
у меня есть базовый сценарий, который хранится в
/tmp/myscript.sh
Вот копия кода в этом скрипте.
#!/bin/bash
AFolderName="archivefolder"
AFileName="archive.zip"
echo "setting variables"
if [ -d $AFolderName ]
then
rm -r $AFolderName
fi
echo "checked if folder exists"
mkdir $AFolderName
cd $AFolderName
echo "about to zip"
zip -r $(date +%Y%m%d)_$AFileName /var/www/*
echo "zipped"
echo "about to s3"
s3cmd put $(date +%Y%m%d)_$AFileName s3://mytestbucket
echo "s3ed"
cd ..
rm -r $AFolderName
echo "done"
Я выполнил crontab -e и добавил задание в соответствии с форматированием для него, и задание, похоже, выполняется, когда я получаю файл журнала во временной папке. однако в файле журнала ничего нет, и ничего не загружается на Amazon ...
вот что в crontab
*/10 * * * * root /tmp/myscript.sh > /tmp/ms.log
Что я делаю не так? нигде нет намека на то, в чем проблема. кстати скрипт ДОЛЖЕН запускаться от имени root.
Согласитесь, что вам нужно войти в систему как root или $ sudo su
действительно стать root, тогда сделайте свой # crontab -e
и извлеките "корень" из строки crontab - похоже, вы выяснили, что это не нравится.
Затем вы можете запустить свой сценарий от имени пользователя root - почти так же, как он у вас уже был.
Вы уверены, что у файла установлен флаг выполнения, (ls -l /tmp/myscript.sh
) и что / tmp не смонтирован noexecute? (mount
) Пустой файл журнала будет создан оболочкой просто из-за перенаправления. Но это не означает, что сценарий действительно запущен. А поскольку вы не перенаправляли вывод ошибок, вы никогда не увидите это сообщение. (Хотя, вероятно, это было отправлено по почте пользователю root?)
Помимо вышеперечисленного, стоит попробовать:
A) Запустите сценарий вручную из командной строки. Убедитесь, что он действительно что-то делает.
Б) Вы можете захотеть импортировать в файл профиля в начале скрипта. В противном случае вы можете пропустить путь и переменные среды, которые могут понадобиться вашему скрипту.
C) Перенаправить вывод ошибок из задания cron. Либо в тот же файл, с 2>&1
в конце или в отдельный файл с 2> diff_file.txt
. Это, вероятно, даст вам некоторое представление о том, что пошло не так.
- Кристофер Карел
правильный способ сделать это было
Вот копия кода этого сценария, который нужен sudo в строке s3cmd.
#!/bin/bash
AFolderName="archivefolder"
AFileName="archive.zip"
echo "setting variables"
if [ -d $AFolderName ]
then
rm -r $AFolderName
fi
echo "checked if folder exists"
mkdir $AFolderName
cd $AFolderName
echo "about to zip"
zip -r $(date +%Y%m%d)_$AFileName /var/www/*
echo "zipped"
echo "about to s3"
sudo s3cmd put $(date +%Y%m%d)_$AFileName s3://mytestbucket
echo "s3ed"
cd ..
rm -r $AFolderName
echo "done"
crontab необходимо удалить ROOT.
* / 10 * * * * /tmp/myscript.sh> /tmp/ms.log