у меня есть .sh
сценарий, который создает .tar.gz
файл и передать его на удаленный сервер, используя RSA
ключи для аутентификации.
Скрипт будет запускаться из terminal
но этого не произойдет, когда я попытаюсь настроить его как Cron
работа.
Я получаю электронное письмо от Cron Daemon
заявляя об этой неудаче: "/bin/sh: /home/backup.sh: Permission denied
", и файл не передается на другой сервер.
Я установил наиболее вероятную причину из этот пост на аскубунту что это, скорее всего, связано с тем, что "Cron
"передает минимальный набор переменных среды вашим заданиям.
Кажется, что исправление включает
#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# rest of script follows
Любая помощь в настройке этого будет принята с благодарностью.
Я бегаю Ubuntu Server 11.04
РЕДАКТИРОВАТЬ : ls -la backup.sh
дает -rw-r--r-- 1 root root 1053 2012-10-13 15:08 backup.sh
Спасибо за ls
вывод. Кажется, что жалобу cron на файл, не имеющий необходимых разрешений, можно принять за чистую монету (в частности, у него отсутствуют разрешения на выполнение); попробуй сделать chmod 755 ./home/backup.sh
и посмотрите, поможет ли это.
редактировать: Я рад, что мы с этим разобрались. Сначала вы должны посмотреть, какой пользователь выполняет это задание в cron, и проверить, кому принадлежит каталог backupdir. У пользователя должны быть разрешения на запись в этот каталог; слепо chmod
дурные вещи не помогут.
Вероятно, было бы лучше добавить к $ PATH, чем перезаписывать его в этом случае.
PATH=${PATH}:/others/bin
Вы также можете отладить значение переменной PATH, используя следующие
#!/usr/bin/env bash
logger "Path-dump: "${PATH}
Вы можете проверить вывод в / var / log / syslog, и вы должны увидеть некоторые результаты
cat /var/log/syslog | grep "Path-dump"
Вы можете установить любую переменную окружения в crontab. Один из способов - поместить строку в файл crontab в формате
varname=value
Затем эта переменная среды будет установлена для любых заданий cron, которые появляются после этой строки в файле. Если вы хотите быть уверены, что это применимо только к этой команде, просто поместите объявление переменной в начало команды, точно так же, как если бы вы изменили переменную только для одной команды на консоли:
varname=value command
Так может выглядеть
0 5 * * * varname=value command
Для личного crontab или
0 5 * * * root varname=value command
Для системного.
Примечание: я ответил на ваш вопрос, но другие правы, что, вероятно, не это причина вашей проблемы.
Сообщение «Permission denied», похоже, предполагает, что пользователь, который cron запускает скрипт, не имеет подходящего разрешения для доступа к скрипту. /home/backup.sh
Убедитесь, что у пользователя, использующего crontab, есть как минимум r-x
в / home и на backup.sh.