【问题标题】:telegram bot with cron and PHP script带有 cron 和 PHP 脚本的电报机器人
【发布时间】:2020-02-17 03:00:59
【问题描述】:

在 EC2 上

我有一个这样的 crontab

* * * * * /usr/bin/php /opt/bitnami/apache2/htdocs/bot.php

bot.php 文件

  1 <?php
  2 
  3 exec( 'touch /opt/bitnami/apache2/htdocs/testCron.txt');
  4 
  5   $botToken="xxxxxxxxxxxxx";
  6 
  7   $website="https://api.telegram.org/bot".$botToken;
  8   $chatId=123456;  
  9   $params=[
 10       'chat_id'=>$chatId,
 11       'text'=>'test bitnami',
 12   ];
 13   $ch = curl_init($website . '/sendMessage');
 14   curl_setopt($ch, CURLOPT_HEADER, false);
 15   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 16   curl_setopt($ch, CURLOPT_POST, 1);
 17   curl_setopt($ch, CURLOPT_POSTFIELDS, ($params));
 18   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 19   $result = curl_exec($ch);
 20
 21   if ($result === FALSE) {
 22      echo 'An error has occured: ' . curl_error($ch) . PHP_EOL;
 23   }
 24   else {
 25      echo $result;
 26   }
 27 
 28   curl_close($ch);
 29 
 30 ?>

testCron.txt 已创建,因此 cronTab 可以正常工作。

当我使用 firefox 打开 bot.php 时,API 调用有效,并且机器人在 Telegram 上发送了消息,但带有 curl 的 PHP 脚本不适用于 Cron。

我把 htdocs 和 bot.php 权限放到了 777 进行测试,但是没有用。

有什么想法吗?

【问题讨论】:

    标签: php cron telegram-bot


    【解决方案1】:

    提示:我将其添加为答案,因为我的声誉(截至目前)低于 50。

    到目前为止,我需要更多信息才能提供支持。这里可能存在多个潜在问题。让我们看看能不能一起走下去。

    1.在 cron 执行期间使错误可见

    在这种情况下,您可以检查 cron 中的日志。我建议通过 this 将任何输出记录到文件中到您的 cron &gt;&gt; /var/log/my-cron.log 2&gt;&amp;1

    * * * * * /usr/bin/php /opt/bitnami/apache2/htdocs/bot.php >> /opt/bitnami/apache2/htdocs/testCron.log 2>&1
    

    从这里我们可以检查是否有任何执行错误、权限错误或配置错误。

    2。检查您的错误日志配置

    可能是您的错误未显示。这是一些配置的一个很好的起点

    // tells your script to report any error
    error_reporting(E_ALL); 
    
    // tells your script to enable error logging and the location where it should log to
    ini_set('log_errors', '1'); // tells your script to enable logging
    ini_set('error_log', '/dev/stderr'); 
    
    

    让我们看看这是否足以产生初步想法,或者我们是否需要更深入地挖掘。

    【讨论】:

    • 我编辑 bot.php 以显示 curl 输出。当我从浏览器打开文件时,一切看起来都正常: {"ok":true,"result":{"message_id":64,"from":{"id":.... cron logs: (bitnami) CMD ( /usr/bin/php /opt/bitnami/apache2/htdocs/bot.php)(CRON)信息(未安装 MTA,丢弃输出)当我从终端运行 curl 时,它可以工作。实际上 PHP 脚本在 crontab 运行时不起作用(只是 curl 部分,第一个带有 touch 命令的部分有效)。
    • 这不能回答所提出的问题,我建议您将此作为评论,因为您要求更多澄清stackoverflow.com/help/how-to-answer
    • @OmariVictorOmosa 我只能添加声誉超过 50 的 cmets,否则我会将其放在评论中。
    • 好的,我建议您编辑答案以删除问题并添加暗示性答案,它不一定是完美的
    • @JonatanBuzek 因为您看不到潜在的错误输出(..., discarding output)。您可以使用此* * * * * /usr/bin/php /opt/bitnami/apache2/htdocs/bot.php &gt; /opt/bitnami/apache2/htdocs/testCron.log 2&gt;&amp;1 将输出重定向到文件吗
    猜你喜欢
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2019-02-04
    • 2019-03-14
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多