【问题标题】:Cron Job error "Could not open input file"Cron 作业错误“无法打开输入文件”
【发布时间】:2021-03-16 10:43:35
【问题描述】:

我花了整整一天的时间来寻找解决这种特定情况的方法(在 Stack Overflow 和 Googs 上),所以如果 Stack Overflow 上已经有这个问题,我深表歉意。

我正在尝试通过命令行在 AWS 中设置一个相当简单的 cron 作业:

* * * * * /usr/bin/php /opt/app/current/record_user_login.php

cron 作业成功触发并且能够接触到有问题的文件(它正在访问正确的环境。)但是,我不断收到错误消息:

"Could not open input file"

我已经:

  • 将文件修改为 777
  • 将脚本更改为仅回显“Hello world”
  • 尝试以 root 用户身份启动 cronjob
  • 将 crontab 文件本身修改为 777

这些解决方案似乎都不起作用。由于未知原因,我无法编辑 rsyslog.conf 以打开 cronlog,因此我没有任何数据。

record_user_login 的内容是:

<?
    include("connect_to_mysql.php");

    //Logged in in 1 week
    $current_date = date('Y-m-j H:i:s', strtotime("-1 weeks"));

    $query = "SELECT DISTINCT user_id FROM users_login_history WHERE sign_in_time > '$current_date'";
    $result = mysql_query($query) or die(mysql_error());
    $i = 0;
    while($row = mysql_fetch_array($result)){
        $i++;
    }
    $query = "INSERT INTO sqm_data (feature, action) VALUES ('user login', $i)";
    if(!mysql_query($query)) {
        die('Error: ' . mysql_error());
    }
?>

有什么想法吗?

【问题讨论】:

  • 如果您已将脚本更改为回显“Hello World”,它真的会打印出来吗?
  • 很遗憾,没有打印任何内容。我只是收到“无法打开输入文件”错误
  • 无论您的问题是什么,chmod 777 都是错误且不安全的! 请不要使用此反模式。
  • 哇。冷却。当时我对发生的事情一无所知,所以我正在尽我所能来诊断问题。

标签: cron


【解决方案1】:

这对游戏来说太晚了,但我确实找到了解决方案。发生的事情是:

我最初在 Windows 记事本中输入了 cron 命令并上传了它们。显然发生的事情是回车(“/ r”,IIRC)被插入,我不知道(和vim,当我从腻子查看文件时。)一个朋友用我不知道的方法删除了这些回车不幸的是,召回/没有很好地跟进,但是在删除退货后,一切都奏效了。

【讨论】:

  • 这件事今天发生在我身上。这个晦涩的答案对我帮助很大,一个快速的“dos2unix”并且它正在运行。谢谢。
  • 看在上帝的份上——同样简单的事情。我什至在使用 cron 编辑之前也遇到过这个问题,但忽略了它。供参考;您可以使用某些文本编辑器在 Windows 上转换/编辑“linux 格式”文件,我为此使用了 EditPad。这可以在没有回车的情况下保存它。
  • 我遇到了同样的事情..由于某种原因,文件每次都以 DOS 格式保存。
  • 遇到了完全相同的问题。要测试 DOS CRLF 行结尾,请运行 file yourscript,如果它返回“ASCII 文本,带有 CRLF 行终止符”,则说明行结尾错误。
  • 感谢您的回答,我还在 Windows 上使用 Netbeans 编辑了 cron 文件,然后想知道为什么我的 cron 没有运行大约 2 小时,最后在 Ubuntu 上的 Sublime Text 中编辑了 cron,事情开始工作了
【解决方案2】:

试试这个:

* * * * * cd /var/www/html/cron/; /usr/bin/php /var/www/html/cron/filename.php -q -f

【讨论】:

  • 当答案左侧有绿色勾号时,该答案被接受为解决方案。除非您可以添加新的解决问题的方法,否则无需回答。
【解决方案3】:
* * * * * /usr/bin/php -q /opt/app/current/record_user_login.php

尝试添加 -q 标志。此外,如果您还没有记录输出,这可能会有所帮助。

你确定你的 PHP 路径是正确的吗?我见过简单的例子:

* * * * * php -q /opt/app/current/record_user_login.php

您可能想尝试一下。

【讨论】:

  • 感谢您的跟进。不幸的是,当我添加 -q 标志时,我仍然收到错误消息。至于记录输出,我似乎无法编辑 .conf 文件以打开 cronlog(我遇到的另一个问题。)
  • 您是否拥有对服务器的完全访问权限以编辑 conf 文件?如果您使用共享主机,您可能无法访问此文件。
  • 终于让它工作了。这是我在日志中得到的内容。看不到任何特别的东西:“Jul 14 19:58:01 ip-10-212-147-129 CROND[14473]: (root) CMD (/usr/bin/php /opt/app/current/Scripts/ record_user_logins.php^M) 7 月 14 日 19:58:01 ip-10-212-147-129 CROND[14473]: (root) CMD (/usr/bin/php /opt/app/current/Scripts/record_user_logins.php ^M)"
  • 感谢您跟上这一点,我意识到我还没有找到解决方案一定有点令人沮丧。我为php文件提供的路径是正确的;我尝试了其他几个在 whereis 结果上监听的路径(例如 /usr/lib/php,它是一个目录),但它们都不起作用。
  • 你能发布record_user_login.php的内容吗?
【解决方案4】:

在cpanel这个解决了我的问题

 php -q -f /home/skat_2347/public_html/cron.php /home/skat_2347/public_html/

【讨论】:

    猜你喜欢
    • 2012-07-17
    • 1970-01-01
    • 2014-02-22
    • 2018-11-23
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    相关资源
    最近更新 更多