以 cron 任务的形式运行 .profile 函数

以 cron 任务的形式运行 .profile 函数

.profile用户文件中root我定义了一个函数,例如

function printDate() {
  date
}

我想每分钟运行一次此功能并将输出附加到 cron.log。我尝试添加以下 crontab 条目:

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

但它不起作用。文件cron.log已创建,但它是空的。我猜这是因为.profilecron 未读取它,因此它无法使用其中定义的任何函数/别名。因此,我尝试将 crontab 条目更改为:

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

但这也不起作用。似乎 cron 仍然无法访问该printDate功能,因为我看到以下内容cron.log

/bin/sh: printDate: not found

答案1

只需将其包装在另一个 bash 脚本中即可。您的文件名会有所不同,但我有:test(.profile)

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

包装(你可以把新脚本放在任何地方,只需更改 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

相关内容