我通常有几个问题,如何cron执行脚本,因为他们通常没有我的环境设置。是否有一种方法可以调用bash(?)以同样的方式cron,这样我就可以在安装它们之前测试脚本?


当前回答

别忘了,因为cron的父进程是init,所以它运行的程序没有控制终端。你可以用这样的工具来模拟:

http://libslack.org/daemon/

其他回答

我发现的另一种简单方法(但可能容易出错,我仍在测试中)是在命令之前获取用户的配置文件。

编辑/etc/cron.d /脚本:

* * * * * user1 comand-that-needs-env-vars

会变成:

* * * * * user1 source ~/.bash_profile; source ~/.bashrc; comand-that-needs-env-vars

很脏,但它帮我完成了任务。是否有方法模拟登录?只是一个你可以运行的命令?Bash—登录不起作用。听起来这是更好的方法。

编辑:这似乎是一个可靠的解决方案:http://www.epicserve.com/blog/2012/feb/7/my-notes-cron-directory-etccrond-ubuntu-1110/

* * * * * root su --session-command="comand-that-needs-env-vars" user1 -l

创建一个cron作业,运行env并将stdout重定向到一个文件。 使用该文件和“env -”一起创建与cron作业相同的环境。

我不相信有;我所知道的测试cron作业的唯一方法是设置它在未来运行一到两分钟,然后等待。

取决于shell的账户

sudo su
env -i /bin/sh

or

sudo su
env -i /bin/bash --noprofile --norc

从http://matthew.mceachen.us/blog/howto -模拟- - cron -环境- 1018. - html

别忘了,因为cron的父进程是init,所以它运行的程序没有控制终端。你可以用这样的工具来模拟:

http://libslack.org/daemon/