【问题标题】:Using crontab from php从 php 使用 crontab
【发布时间】:2012-11-14 12:44:00
【问题描述】:

我在设置允许我从 PHP 脚本管理 cron 作业的服务器时遇到问题。 这个想法是:用户可以根据需要创建任意数量的任务,并可以为每个任务设置警报。警报保存到 MySQL 数据库后,我想在用户指定的时间为该条目创建一个 cronjob。

逻辑非常简单,但我对 unix 用户/文件权限感到沮丧。问题是,用户“www-data”没有运行 crontab 的权限,因此我不能使用它通过 php 脚本中的 shell_exec 调用来管理 cronjobs。我已经阅读了很多关于类似问题的教程/线程,但没有任何运气。我能得到的最接近的是我应该确保 www-data 用户有权运行 crontab(我很肯定它没有)。但是,我将“www-data”用户放入“crontab”组,我在“/etc/cron.d”目录中创建了“cron.allow”文件,但仍然没有。

顺便说一句,我正在使用 $output = shell_exec("crontab -u www-data -l") 来查看它是否正常工作(如果 $output == null 则出现错误)。

我应该怎么做才能使它工作?或者我应该使用一些不同的方法(也许我可以有一些 www-data 可写的文件,并在 crontab 配置中设置它应该在那里检查 cronjobs,但我也不知道该怎么做)?

【问题讨论】:

    标签: php cron crontab


    【解决方案1】:

    编辑:您可以将修改后的文件放入 /etc/cron.d,该文件也可用于 cron comamnds。

    免责声明:我没有这样做(尽管如果我记得上次我是如何做到的,我会被诅咒的)

    【讨论】:

    • 我在 Google 上的“包含”中找不到任何内容,只有基本的 crontab -e/-l/-rcrontab /path/to/file。简而言之,我希望 crontab 检查另一个可以通过 php 脚本访问/编辑的文件,而不是用该文件替换所有 cron 作业。如果您的意思是不带任何参数执行 crontab 然后键入include /location/to/file 我不知道如何保存它(只能使用 CTRL+C 关闭它,这会终止进程而不保存任何内容)。最好的办法是以某种方式在主 cron 文件中指定该文件(在 /var/spool/cron/crontabs 目录中)。
    • 我很抱歉,我可以发誓我已经做到了,但也许我对 shell 脚本或其他东西感到困惑。我已经修改了我的答案,因为它是不正确的。
    • 没问题,我认为这样的功能非常有用,至少我可以看到它如何使某些调度作业比现在更容易。
    【解决方案2】:

    运行我的应用程序的系统似乎非常奇怪地处理 cron.allow/cron.deny 文件(至少就我对这些文件的理解而言)。我删除了/etc/cron.allow 文件,突然 www-data 用户可以在 php 脚本中使用 crontab 命令。我不知道为什么它不能在 cron.allow 文件中声明 www-data 用户,但现在看起来它可以工作了。

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 2011-09-21
      • 1970-01-01
      • 2010-09-19
      • 2016-06-03
      • 2016-03-02
      • 2011-07-05
      • 2011-06-30
      • 2016-04-07
      相关资源
      最近更新 更多