使用cpanel在codeigniter中的cronjob

Posted

技术标签:

【中文标题】使用cpanel在codeigniter中的cronjob【英文标题】:cronjob in codeigniter using cpanel 【发布时间】:2013-10-12 12:23:03 【问题描述】:

我的网站托管服务器是 hostmonster.com。

我的应用程序使用 codeigniter 框架。

我有一个代码可以向我的用户发送电子邮件,我想让它自动发送。

我使用了托管服务的cpanel,并尝试将命令作为

php -q www.mysite.com/admin admin sendDailyEmail

我的控制器是 admin,方法是 sendDailyEmail,控制器位于 application/controllers/admin 文件夹中。

我还设置了每次运行 cronjob 时的提醒电子邮件。

邮件主题为

cron php -q /home1/username/public_html/admin admin sendDailyEmail

身体说

没有指定输入文件

我哪里错了。

我从未运行过 cronjobs,这是我的第一次。 我也不擅长给出命令行指令。

我的管理员 sendDailyEmail 代码如下

function sendDailyEmail() 
    $data = $this->admin_model->getDailyData();
    foreach ($data as $u) 
    if($u->Daily)
     //if(!$u->Amount)
       if ($u->Email=='myemail@gmail.com') 

                $user['user_data']['FirstName'] = $u->FirstName;
                $user['user_data']['LastName'] = $u->LastName;
                $user['user_data']['Id']=$u->Id;

                $this->email->clear();
                $this->email->to($u->Email);
                $this->email->from('alerts@mysite.com', 'MySite');
                $this->email->subject("My Subject");
                $msg = $this->load->view('emails/daily_view', $user, true);
                $this->email->message($msg);
                if ($this->email->send())
                    $data['message'] = "Daily Emails has been sent successfully";
                else
                    $data['message'] = "Daily Emails Sending Failed";
            
        
    
    $data['main_content']['next_view'] = 'admin_home_view';
    $this->load->view('includes/admin_template', $data);

【问题讨论】:

我已经删除了身份验证,但如果我现在复制粘贴 url,它只会向我的用户发送一封电子邮件。我担心如果有人知道,他们会继续使用 url 发送电子邮件。我该如何限制这一点。我正在使用代码点火器。 cronjob 通过 cpanel 运行。以前我的 sendDailyEmail 中有这段代码 if (!$this->session->userdata('variable')) redirect('admin/admin', 'refresh'); 【参考方案1】:

Codeigniter 为运行 crons 等设置不同的命令行。

阅读: http://www.codeigniter.com/user_guide/general/cli.html

所以你应该运行:

php index.php admin admin sendDailyEmail

(可能需要调整;基于您上面的代码)

看看我刚刚写的一篇更深入的文章:

http://codebyjeff.com/blog/2013/10/setting-environment-vars-for-codeigniter-commandline

【讨论】:

【参考方案2】:

我也遇到了同样的问题,但是为我工作

wget http://www.yoursite.com/controller/function

【讨论】:

【参考方案3】:

对于 CodeIgniter 2.2.0

你可以试试这个:

 php-cli /home/username/public_html/index.php controller method

或根据您的情况

 php-cli /home/username/public_html/index.php admin sendDailyEmail 

对我来说很好用.. 干杯!

【讨论】:

我要试试..几个小时后反馈你 这对我有帮助。出于某种原因,cpanel 不会使用 php 二进制文件运行脚本,而是使用 php-cli 运行脚本。【参考方案4】:

您可以使用wget 并设置您喜欢的任何时间:

wget http://www.mysite.com/admin/sendDailyEmail

你也可以使用curl:

curl --silent http://www.mysite.com/admin/sendDailyEmail

【讨论】:

cronjob 已完成,我收到一封电子邮件说 ** --2013-10-05 11:20:01-- mysite.com/admin/admin/sendDailyEmail Resolving www.mysite.com... 66.147.240.184 正在连接到 www.mysite.com|66.147.240.184|:80... 已连接。 HTTP 请求已发送,等待响应... 200 OK 长度:0 [text/html] 保存到:sendDailyEmail' 0K 0.00 =0s 2013-10-05 11:20:11 (0.00 B/s) - sendDailyEmail' 已保存 [0/0] ** 但它没有发送电子邮件 如果您直接在浏览器中输入http://www.mysite.com/admin/sendDailyEmail,它会发送电子邮件吗? 在我的共享主机环境中尝试过,wget 得到“权限被拒绝”,curl 得到“请求已被 Mod Security 阻止”。

以上是关于使用cpanel在codeigniter中的cronjob的主要内容,如果未能解决你的问题,请参考以下文章

在 cpanel 安装后 Codeigniter 项目无法正常工作

上传 CodeIgniter 网站 bt cpanel

CodeIgniter + 命令行 + Cron + Cpanel

Codeigniter CLI 在终端中工作,而不是在 Cpanel cron 中

codeigniter 项目未在 cpanel 中运行

Codeigniter 中的 Cron 作业