запустить функцию .profile как задание cron

В файле .profile пользователя root я определил функцию, например,

function printDate() {
  date
}

Я хочу запускать эту функцию каждую минуту и ​​добавлять вывод в cron.log. Я попытался добавить следующую запись в crontab:

* * * * * printDate > $HOME/cron.log 2>&1

Но это не работает. Файл cron.log создается, но он пуст. Я предполагаю, что это потому, что .profile не читается cron, поэтому любые функции / псевдонимы, определенные в нем, для него недоступны. Поэтому я попытался изменить запись в crontab:

* * * * * source $HOME/.profile;printDate >> $HOME/cron.log 2>&1

Но это тоже не работает. Кажется, что cron все еще не имеет доступа к функции printDate, потому что я вижу следующее в cron.log

/bin/sh: printDate: not found
4
задан 11 April 2012 в 19:21

1 ответ

Просто оберните это в другой скрипт bash. Ваши имена файлов будут другими, но у меня есть: test (.profile)

#!/bin/bash
function printDate() {
  date
}

wrap (новый скрипт, который вы можете поместить куда угодно, просто измените URL)

#!/bin/bash
cd ~/
source ./test
printDate > ./date.log

, когда запустить из / bin / sh

$ ls
test  wrap
$ ./wrap
$ cat date.log
Wed Apr 11 11:49:39 EDT 2012
$ 

Теперь просто убедитесь, что ваши пути / окружение правильные

Строки crontab, которые я только что протестировал, были:

SHELL=/bin/sh
HOME=/root
* * * * * $HOME/wrap >/dev/null 2>&1
0
ответ дан 11 April 2012 в 19:21

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

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