Сценарий оболочки не работает с cronjob

1261
erdomester

Я использую PUTTY для доступа к серверу. Я могу вывести базы данных с помощью следующей команды:

/usr/bin/mysqldump --all-databases | /bin/gzip > Backup_DB/alldatabases_test.sql.gz 

Когда я запускаю скрипт из корня, файл выгружается в указанную папку:

root@server1 [~]# sh mybackup.sh root@server1 [~/Backup_DB]# ls -a ./ ../ alldatabases_test.sql.gz 

Однако, когда я настроил это как cronjob, он ничего не выбрасывает:

*/2 * * * * sh mybackup.sh 

Другие cronjobs работают нормально.

РЕДАКТИРОВАТЬ

Так что запуск сценария не работает, но я ценю вашу помощь. Моя конечная цель - запустить скрипт из того места, где находятся все остальные мои cronjobs, и создать резервную копию в папке, к которой у меня есть доступ по ftp. Вот почему я добавил cronjob:

*/2 * * * * sh /home/mysite/www/cronjobs/mybackup.sh 

с содержанием:

/usr/bin/mysqldump --all-databases | /bin/gzip > /home/mysite/www/cronjobs/alldatabases.sql.gz 

Это тоже не работает. Я не смог найти alldatabases.sql.gz в папке / cronjobs. Неправильно ли заданы пути?

0
Где твой `mybackup.sh`? Можете ли вы попробовать изменить свой cronjob на `sh / path / to / mybackup.sh`? attomos 10 лет назад 0
Я не Linux-парень, но когда я захожу в PUTTY и перечисляю папки, я вижу такие папки, как «Рабочий стол», «Документы», «Загрузки», «Изображения», public_html и т. Д. Именно здесь находится mybackup.sh. erdomester 10 лет назад 0
Хорошо, когда вы видите `mybackup.sh`. Можете ли вы набрать `pwd`, чтобы получить текущий рабочий каталог. Допустим, это `/ home / username`, добавьте его с помощью` mybackup.sh`. Итак, в вашем cron вы можете использовать что-то вроде `sh / home / username / mybackup.sh`. Надеюсь, это поможет :) attomos 10 лет назад 0
Это / root. Должен ли я добавить файл к этому также? erdomester 10 лет назад 0
Да, вы можете попробовать это. `sh / root / mybackup.sh` attomos 10 лет назад 0
Ничего, к сожалению. erdomester 10 лет назад 0

1 ответ на вопрос

1
l0b0

First, you need the full path to the script as @attomos said. The easiest way to get this is to run cd relative/path/to/script/directory and then pwd or echo "$PWD" to get the current directory.

Second, the Backup_DB/alldatabases_test.sql.gz path inside the script is now relative to the system root, so the script tries to save it to /Backup_DB/alldatabases_test.sql.gz, which probably was not intended. You need to make that path absolute as well: /root/Backup_DB/alldatabases_test.sql.gz.

You should see some error output from this in /var/log/cron.

Это не помогло. В журнале ничего нет об этом скрипте. erdomester 10 лет назад 0
Какая на самом деле строка в вашем crontab сейчас? l0b0 10 лет назад 0
Я отредактировал свой вопрос. Я надеюсь, что это уточняет это. erdomester 10 лет назад 0
Вы должны использовать абсолютный путь к выходному файлу, как я только что сказал. С вашим последним заданием cron `alldatabases.sql.gz` будет сохранено в корневом каталоге системы. Оператор перенаправления оболочки работает с * текущим каталогом *, который по крайней мере для корневого задания cron будет корневым каталогом. l0b0 10 лет назад 0
Я добавил путь. Пожалуйста, смотрите мой пост редактирования снова. По-прежнему нет файла, созданного в папке / cronjobs. erdomester 10 лет назад 0
Что выводит `ls / home / mysite / www / cronjobs`? l0b0 10 лет назад 0
Вот это да. Наконец-то пришло! И вы были правы, без абсолютного пути, файл был создан в / home / mysite, однако это не root. Спасибо за помощь! erdomester 10 лет назад 0

Похожие вопросы