Crontab не запускает скрипт - PullRequest
       30

Crontab не запускает скрипт

0 голосов
/ 23 октября 2018

Я пытаюсь запускать следующий скрипт через crontab каждый день в 12:

#!/bin/sh
mount -t nfs 10.1.25.7:gadal /mnt/NAS_DFG
echo >> ~/Documents/Crontab_logs/logs.txt
date >> ~/Documents/Crontab_logs/logs.txt
rsync -ar /home /mnt/NAS_DFG/ >> ~/Documents/Crontab_logs/logs.txt 2>&1
unmout /mnt/NAS_DFG

Поскольку он должен запускаться в sudo, я добавил следующую строку в 'sudo crontab' так, чтобы у меня было:

someone@something:~$ sudo crontab -l
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

0 12 * * * ~/Documents/Crontab_logs/Making_save.sh 

Но он не запускается.Я упоминаю, что просто выполнение сценария thourgh:

sudo ~/Documents/Crontab_logs/Making_save.sh

работает хорошо, за исключением того, что в файле журнала не записывается вывод команды rsync.

Есть идеи, что происходит не так?Я думаю, что проверил основной источник ошибок: использование оболочки, оставление пустой строки в конце и т. Д. *

1 Ответ

0 голосов
/ 23 октября 2018

sudo crontab создает задание, для которого заканчивается crontab root (если вам удастся правильно его настроить; синтаксис в root crontabs другой).Когда cron запускает задание, $HOME~, если вы используете оболочку или язык сценариев с расширением тильды) будет ссылаться на домашнюю страницу root и т. Д.

Возможно, вам следует просто добавить

0 12 * * * sudo ./Documents/Crontab_logs/Making_save.sh

вместо вашего crontab.

Обратите внимание, что crontab вообще не имеет расширения тильды (но мы можем полагаться на тот факт, что cron всегда будет работатьиз вашей домашней директории).

... Хотя это все равно будет иметь проблемы, потому что, если скрипт работает под sudo и создает новые файлы, эти файлы будут принадлежать root и не могутбыть изменены вашей обычной учетной записью пользователя.Лучшее решение по-прежнему состоит в том, чтобы запускать только действительные команды mount и umount с sudo и минимизировать объем кода, который выполняется на привилегированной учетной записи, т.е. удалить sudo из вашей crontab и вместо этого добавитьэто в скрипте для отдельных команд, которые требуют этого.

...