【问题标题】:How to set up cron job in php(for iPhone application)如何在 php 中设置 cron 作业(适用于 iPhone 应用程序)
【发布时间】:2013-06-19 07:08:05
【问题描述】:

在 iOS 应用程序中,我必须设置 cron 以在每 5 分钟后向特定设备发送通知。我正在使用 frapi API。我搜索了一下,发现我必须像这样创建 cron 条目:

/etc/cron.d/

*/5 * * * * root cd /path_to_your_script/ && php your_script.php >> /var/some.log &2>&1

I wonder where and how can i set above commands ? 我的脚本已准备好发送通知,如下所示:

<?php

// Device token:
$deviceToken = 'xxxxxx';

$passphrase = 'xxxxx';
$badge = 1;

// Displays alert message here:
$message = 'Match Found!';


$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert',       '/Users/Documents/iOS_Application_Developement/new/APNSPHP/ApnsPHP-master/ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;

// Create the payload body
$body['aps'] = array(
'alert' => $message,
'badge' => $badge,
'sound' => 'default'
);


// Encode the payload as JSON
 $payload = json_encode($body);

// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) .      $payload;

// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));

if (!$result)
  echo 'Message not delivered' . PHP_EOL;
else
  echo 'Message successfully delivered' . PHP_EOL;

// Close the connection to the server
fclose($fp);

?>

我的 php 脚本已准备就绪,但我不知道如何在每 5 分钟后运行一次。我正在使用 Frapi API。有人知道如何在 Frapi API(php 和 iOS)中设置和运行 Cronjob .

我是这个 cron 工作的新手..所以任何帮助将不胜感激。

【问题讨论】:

  • 我以为你不需要 cron 工作
  • 不。我需要一个 cron 作业。有什么解决方案吗?
  • 我给了你已经粘贴在这里的解决方案,
  • 是的,但我很困惑在哪里以及如何使用它。请描述一下。

标签: php ios cron push-notification frapi


【解决方案1】:

你需要检查你是否有crontab,所以你可以这样做

通过输入检查终端

crontab -l

如果它没有给你 cron 标签,那么你需要下载它。 mac系统可以下载 来自here的cronix

并添加您的命令并根据您的命令设置时间间隔。

【讨论】:

    【解决方案2】:

    *注意:此答案假设您的服务器运行的是 unix 或 linux,如果是 Windows 服务器请留下评论,我会写一个 Windows 版本。

    *注2:此答案还假设您要运行的php脚本位于/var/www,如果不是这种情况,请将/var/www的所有实例替换为包含您的php脚本的文件夹。


    正如 Ishu 所说,第一步是检查您的服务器是否支持crontab;在终端中运行以下命令(通过 SSH 或如果您有物理访问权限,则在控制台中)执行此操作。

    crontab -l
    

    如果这个命令返回一些关于没有设置 cron 任务的消息,太好了!否则,谷歌四处寻找如何在您的服务器运行的任何操作系统上安装 crontab 并执行此操作。

    如果您想记录 php 脚本的输出以便检查它,请在与 php 脚本相同的目录中创建一个 logs 文件夹,并设置其权限使其可写。

    cd /var/www/
    mkdir logs
    chmod 660 logs
    

    确认 crontab 正在工作后,您可以通过在终端中运行以下命令来设置 cron 作业。

    crontab -e
    

    这将打开一个文本编辑器,此时该编辑器应为空。在编辑器中输入以下代码:

    */5 * * * * cd /var/www && /usr/bin/php your_script.php &> logs/cron.log
    

    your_script.php 替换为您的php 脚本的名称。如果您不想记录日志,请将 logs/cron.log 替换为 /dev/null

    如果您的 php 安装不在 /usr/bin/php,请将其更改为您服务器上 php 二进制文件所在的位置。

    按照您喜欢的方式设置好所有内容后,运行 crontab 正在使用的编辑器的“保存并退出”命令。使用以下命令确认作业设置成功。

    crontab -l
    

    您的 cron 作业现已设置完毕,将每 5 分钟运行一次 /var/www/your_script.php

    【讨论】:

    • 感谢您提供的描述性和有用的信息。但我想在 Mac 中运行 cronjob,我使用 getfrapi.com [Frapi] 作为服务器。您能帮我解决这个问题吗?
    • Mac OS 是基于 unix 的系统,因此命令应该仍然可以正常工作。 Frapi 框架应该无关紧要,因为您只是在运行一个独立的 php 文件,可以通过 php 命令行界面来完成。将 /var/www 替换为包含您要运行的 php 脚本的目录。 cron 作业和 /usr/bin/php 以及 php 二进制文件的绝对路径。如果您不知道您的 php 二进制文件在哪里,请使用命令 which php 找出它在哪里。
    • 我了解除 /var/www 之外的所有内容。您写道,将其替换为包含我要运行的 php 脚本的目录,我正在通过 Frapi 运行。那么它可以写什么来代替 /var/www.
    • 好的,我知道我必须编写包含我的脚本的文件夹来代替 /var/www 。
    • 谢谢伙伴。它工作得很好。现在我有另一个问题,如何确保 cron 不会超时并且能够批处理脚本?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2012-04-11
    • 2012-11-12
    • 1970-01-01
    • 2017-12-28
    • 2020-07-17
    相关资源
    最近更新 更多