Установите crontab, проблемы с пользователем

Я хотел бы настроить использование задания крона crontab -e. Это задание должно быть выполнено как корень, таким образом, я думал, что просто включают запись sudo crontab -e был бы достаточно. К сожалению, это не.

Сценарий я должен выполнить работы хорошо, если я непосредственно ввожу:

sudo /home/user/./script.sh

Я зарегистрирован машина как пользователь user, и моя crontab запись (sudo crontab -e) похож на следующее:

*/1 * * * * /home/user/./script.sh

Так, что я пропускаю здесь? У меня есть чувство, что проблема связана направо от текущего пользователя или чего-то вроде этого.


Во-первых, я смог избавиться от потребности быть корнем для выполнения сценария. Мой crontab запись (классик crontab -e так как я не должен больше быть корнем), выполнения каждую минуту, и:

* * * * * /home/user/script.sh

Мой script.sh:

#!/bin/bash
set -e
# Other stuff

Снова, это работает, когда вручную вводят ./script.sh, но не от крона задание создается.


Я знаю, имеют доказательство, что сценарий выполняется заданием крона. Я перенаправил ошибку на файле, как рекомендуется в комментарии, и получите следующую ошибку в нем:

python: can't open file 'get-status.py': [Errno 2] No such file or directory

Объяснить это, однажды в моем script.sh, Я использую докера для выполнения некоторого другого сценария:

docker run -v $PWD:/t -w /t [image] [command] get-status.py

который снова, работы вручную (./script.sh) но не от задания крона.


Так, я нашел проблему: docker run -v $PWD:/t [...] скопируйте содержание текущего каталога в контейнер докера. Так как это выполняется от задания крона, текущий каталог является, конечно, не хорошим, таким образом file not found исключение.

Я нахожу это довольно ужасным, чтобы сделать что-то как docker run -v /home/user/:/t [...] был бы какой-либо другой путь?

Решение

Хотя этот вопрос отмечен как дубликат, это не та же проблема. У меня есть a PATH проблема в рамках моего сценария, и должна была изменить его, так как это инициировано заданием крона, которое взяло $PWD путь сценария.
См. мой собственный ответ.

1
задан 22 September 2016 в 11:12

1 ответ

Основной проблемой с моим вопросом была на самом деле проблема с PATH Я определил в своем задании крона.
Задание крона используется для инициирования задания, и это задание скопирует текущий каталог в контейнер докера через docker run -v $PWD:/t [...].
Так как задание крона не инициировано из правильного каталога, я должен был изменить путь в своем сценарии, чтобы сказать докеру не использовать текущий каталог, но каталог, на котором находится сценарий.
Как указано в этом ответе, я изменяю строки к:

 SCRIPT=$(readlink -f "$0")
 SCRIPTPATH=$(dirname "$SCRIPT")
 docker run -v $SCRIPTPATH:/t [...]
1
ответ дан 7 December 2019 в 15:48

Другие вопросы по тегам:

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