Задание Cron выполнить backup.bash

Я хочу, чтобы cron выполнял delete_snapshot.bash, но когда я пытаюсь создать cron, как показано ниже:
*/1 * * * * /var/www/mango_gis/delete_snapshot.bash >/dev/null< /b>
Он вообще не выполнил мой скрипт, потому что, когда я не увидел, что он удалил снимок в облаке амазонки, а мой скрипт уже протестирован с bash, он работает нормально.

Вот мой сценарий, как показано ниже:

#!/bin/bash

get()
{
    local pos=$1
    shift
    eval 'echo ${'$pos'}';
}

length(){ echo $#; }

find_snapshots()
{
    echo $(ec2-describe-snapshots | xargs -n1 basename);
}

snapshots=$(find_snapshots)
len=$(length $snapshots)
row_count=$(($len/6))

if(($row_count > 6)); then
    delete_count=$(($row_count-6))
    for (( i=1; i<=$delete_count; i++ )); do
            ec2-delete-snapshot $(echo $(get $((2+$((6*$(($i-1)))))) $snapshots)) > /dev/null
    done
fi


Выше я обнаружил, что проблема заключается в том, что я вызываю одну команду команды EC2.
Я протестировал создание одного задания cron для вызова этой команды: ec2-describe-snapshots,
но это не так. работай.

Подскажите пожалуйста...

Леахина


person leejava    schedule 08.06.2010    source источник
comment
Откуда вы знаете, что он вообще не выполнял [сценарий]? Вы дважды отбрасываете stdout — один раз в crontab и один раз в самом скрипте — возможно, скрипт выполняется, но какая-то другая ошибка отбрасывается или пропускается. Что говорит ваш журнал crond? Куда деваются crond ошибки? Запускается ли другое тривиальное задание cron (например, */1 * * * * logger -p daemon.err -- "I am a cronjob")?   -  person pilcrow    schedule 09.06.2010
comment
Я знаю, что он не выполнил сценарий, потому что я не удалил моментальный снимок, который хочу удалить из облачных вычислений Amazon, поэтому он не сработал. В любом случае, как я могу просмотреть журнал cron?   -  person leejava    schedule 09.06.2010
comment
вы можете определить файл журнала, используя cron в вашем syslog.conf   -  person Thariama    schedule 09.06.2010


Ответы (2)


вы должны добавить программу, с помощью которой вы хотите обработать этот файл; что-то типа:

*/1 * * * * /bin/bash  /var/www/mango_gis/delete_snapshot.bash > /dev/null

использование полного пути важно, потому что у вас нет загруженных переменных среды, когда cron запускает процесс

person Thariama    schedule 08.06.2010
comment
Я изменил его так: */1 * * * * /usr/bin/bash /var/www/mango_gis/delete_snapshot.bash ›/dev/null, но это не сработало. - person leejava; 09.06.2010
comment
вы можете использовать какой bash в командной строке, чтобы узнать местоположение вашей программы bash. затем поместите этот абсолютный путь в свою работу cron. (расположение программ отличается от системы к системе, например, я получил программу bash в /bin/bash (из вашего редактирования похоже, что ваш абсолютный путь к bash такой же)) - person Thariama; 09.06.2010
comment
пожалуйста, скопируйте/вставьте свою команду (все, что связано с подстановочными знаками) в вашу командную строку и сообщите нам, что произойдет (это работает правильно?) - person Thariama; 09.06.2010
comment
Я копирую /bin/bash /var/www/mango_gis/delete_snapshot.bash › /dev/null и передаю его своей команде, все работает нормально. - person leejava; 09.06.2010
comment
в этом случае ваша программа в порядке - проверьте cron с помощью cronlog. Выполняется ли какое-либо другое задание cron? вы можете, например, разместить там очень простой - person Thariama; 09.06.2010
comment
теперь я знаю проблему, проблема в том, что в delete_snapshot.bash я назвал команду ec2 ec2-describe-snapshots, и она не работает, когда я создаю одно задание cron для выполнения этой команды ec2-describe-snapshots и перенаправления результат в файл журнала, но он не работает. Вы когда-нибудь создавали задание cron для выполнения ec2-describe-snapshots облака amazon? - person leejava; 09.06.2010
comment
никогда не использовал моментальные снимки ec2-describe-snapshots, но он запускается из командной строки, поэтому я думаю, что его можно заставить работать (возможно, вы пропустили некоторые переменные среды при выполнении через cron) - person Thariama; 09.06.2010
comment
для изменения среды cron здесь можно найти несколько полезных советов: stackoverflow.com/questions/2135478/ - person Thariama; 09.06.2010

спасибо за вашу помощь до сих пор. Теперь я могу поймать его.

проблема в том, что cron не загружает переменную env, поэтому нам просто нужно указать, что мы используем для переменной env во время выполнения cron. вот мой тестовый код для команды ec2, как показано ниже:

export EC2_PRIVATE_KEY=/root/keys/pk-Q4NR5FGDTSWWK65EDSIDCBTEQWJ6G24V.pem export EC2_CERT=/root/keys/cert-Q4NR5FGDTSWWK65EDSIDCBTEQWJ6G24V.pem export JAVA_HOME=/usr/lib/jvm/java-6-sun/export EC2_HOME_BIN

echo "начать ec2-describe-snapshots" >> /var/log/ec2-delete-snapshot.log $EC2_HOME_BIN/ec2-describe-snapshots >> /var/log/ec2-delete-snapshot.log echo "завершить" >> /var/log/ec2-delete-snapshot.log

person leejava    schedule 10.06.2010
comment
это именно то, о чем я говорил вчера в других комментариях к моему ответу (вам нужно нажать показать еще X комментариев, чтобы увидеть их) - person Thariama; 10.06.2010