Ubuntu 18.04 работает в качестве гостя на MacOS 10.14.3. Гипервизор: VMWare Fusion 10
Цель: каждую минуту добавлять дату / время в файл
Состояние: скрипт запускается каждую минуту, вставляя новую пустую строку в текстовый файл. Дата не включена. В этом проблема
Когда скрипт запускается из командной строки, используя ту же учетную запись, что и учетная запись в crontab, дата добавляется в файл, без проблем.
Очевидная проблема: выбор даты в файл работает из командной строки, но та же команда из cron не производит дату
Этот скрипт запускается каждую минуту в cron.
#!/bin/bash
#append_date_to_file.sh
target_file='/home/dan/timestamps'
echo $(date) >> $target_file
Это запись cron
crontab -e
PATH=/bin/bash:
* * * * * /home/dan/append_date_to_file.sh
РЕЗУЛЬТАТЫ При запуске три раза из командной строки, а затем просмотр целевого файла:
$ cat /home/dan/timestamps
Sat Aug 17 18:31:12 CDT 2019
Sat Aug 17 18:31:33 CDT 2019
Sat Aug 17 18:31:34 CDT 2019
Затем ожидание три минуты, чтобы пусть он запускается три раза в cron, а затем просматривает целевой файл: (то же, что и выше, за исключением трех новых пустых строк после дат.)
Рассмотренные проблемы ... права доступа к файлу. Чтобы решить эту проблему, вот файл, который указан с разрешениями и владельцем: group:
-rwxrwxrwx 1 dan dan 157 Aug 17 18:43 timestamps*
.. Скрипт не работает в cron. Решено: проверено, что скрипт запускается из-за того, что измененное время файла изменяется в начале каждой минуты, и файл получает новую пустую строку в то же время.
Я не могу придумать объяснения, почему дата не добавляется в файл, когда скрипт запускается cron вместо командной строки.
1116 Любые идеи приветствуются.
Спасибо.
PATH
должен быть список каталогов для поиска команд, а не названия конкретной команды, таким образом, PATH=/bin/bash:
является неправильным, поскольку можно проверить путем выполнения следующего в интерактивной оболочке:
$ PATH=/bin/bash: date
Command 'date' is available in '/bin/date'
The command could not be located because '/bin' is not included in the PATH environment variable.
date: command not found
Хотя cron
задания выполнений в довольно ограниченной среде (можно проверить точно что путем выполнения printenv > /tmp/cronenv
или подобный как задание крона), его значение по умолчанию PATH
включает местоположения /usr/bin
и /bin
где bash
оболочка и date
исполняемые файлы найдены - таким образом, нет никакой потребности изменить его вообще, просто используйте
* * * * * /home/dan/append_date_to_file.sh
(если, конечно, это /home/dan/append_date_to_file.sh
исполняемый файл).
Как в стороне, Вам не нужна замена команды echo $(date)
- плоскость date
достигнет того же результата.
cron
может быть скорее $PATH
забывающий время от времени. Многие люди просто префикс управляют с путем команды. Для date
управляйте, найдите, это - путь с и одна из этих трех команд:
$ which date
/bin/date
$ type -a date
date is /bin/date
$ command -v date
/bin/date
Так измените свой сценарий от:
$(date)
кому:
$(/bin/date)
Можно сократить сценарий путем замены:
target_file='/home/dan/timestamps'
echo $(/bin/date) >> $target_file
с:
/bin/date >> /home/dan/timestamps