我正在设置一个新的网络服务器,但无法让 cron 按预期执行。我正在使用脚本在 中创建 cron 作业.tmp/crontab.txt
,然后将其移至/var/spool/cron
用户“Apache”下。据我所知,这些 Apache 条目不会执行。
/var/spool/cron
:有3个用户文件:
根0字节
Apache 344 字节(看起来不错,但不执行)。
JLee 3514 字节(这是我所有手动输入的地方)。
我安排的手动作业正在正常执行。然而,手动作业会创建一个“子 cron”,这就是 Apache 的任务。我究竟做错了什么?
我希望所有 cron 作业都在一个用户下创建,因为我是该服务器的管理员和唯一用户。
答案1
如果您只是复制新文件,则 cron 守护程序不会读取它们。您应该使用 crontab 命令来安装新的 crontab 文件。它还向 cron 守护进程发出信号以读取文件。
从 crontab 手册页:
...and though these are files in /var, they are not intended to be
edited directly.
答案2
正如在基思的回答,您不应该将文件直接放入,/var/spool/cron
因为它们不会被看到crond
。
您应该维护自己的用户crontab
文件实例,并使用crontab
命令来发出更改信号crond
:
echo '* * * * * date >>/tmp/output' | crontab
如果您可以创建多个条目,则可以将每个条目写入其自己的文件,然后将cat
结果写入单个crontab
.
mkdir .crondir
...
echo '* * * * * echo job1 >> /tmp/output.1' > .crondir/job1
echo '* * * * * echo job2 >> /tmp/output.2' > .crondir/job2
echo '* * * * * echo job3 >> /tmp/output.3' > .crondir/job3
cat .crondir/job* | crontab
显然,运行该命令的用户必须crontab
有权使用它。根据您为应用程序设置权限方案的方式,它可能是其自己的用户帐户。否则,它可能必须是您的 Web 服务器用户 ( apache
) 甚至可能是root
。