Назад | Перейти на главную страницу

Назначение переменных окружения для CRON

у меня есть .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.