Запишите $ (date) в файл, используя Cron и Bash Shell Script

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 Любые идеи приветствуются.

Спасибо.

1
задан 18 August 2019 в 02:49

2 ответа

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 достигнет того же результата.

1
ответ дан 7 December 2019 в 13:15

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
1
ответ дан 7 December 2019 в 13:15

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

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