2016-12-03 69 views
1

我有一个laravel项目与codebird-php lib那里。我试图设置一个cron作业来开始安排我的流媒体命令。
在我的本地机器上使用Ubuntu 16,它可以完美运行,每分钟创建一个流向Twitter并在55秒内死亡。Ubuntu 15继续通过cron的codebird-php流不工作

但在远程VPS上它没有安排我的命令。我已经通过cron尝试了它,通过在终端中进行提示并且没有任何影响。任何人都可以解释我哪里有一个愚蠢的错误,在cron工作Ubuntu 15.04和Ubuntu 16.04有什么区别? 这是命令的代码: 连接命令设置流,并开始他们

class ConnectToStreamingAPI extends Command 
{ 

    protected $signature = 'connect'; 
    protected $run = []; 

    protected $users; 


    protected $description = 'Connect to the Twitter Streaming API to search tweets by keywords'; 

    protected $twitterStream; 


    public function __construct(User $user) 
    { 
     $this->users = $user::where('id', '>', '1')->pluck('id')->toArray(); 
     parent::__construct(); 
    } 


    public function handle() 
    { 
     //set_time_limit(59); 
     $this->setRun(); 
     $this->runUserStreamCommand(); 

     return "Fired"; 

    } 

    protected function setRun() 
    { 
     foreach ($this->users as $user) { 
      $this->addToRun($user); 
     } 
    } 

    protected function runUserStreamCommand() 
    { 
     foreach ($this->run as $process) { 
      $process->setPty(true); 
      $process->start(); 
     } 
     $count = count($this->run); 
     while (count($this->run) > 0) { 
      foreach ($this->run as $key => $process) { 
       $childProcess = $process->getPid() + $count; 
       try { 
        $process->checkTimeout(); 
       } catch (ProcessTimedOutException $e) { 
        exec("kill -15 " . $childProcess); 
       } 
       if (!$process->isRunning()) { 
        unset($this->run[$key]); 
       } 
      } 
     } 

    } 

    protected function addToRun($user_id) 
    { 
     $this->run[] = new Process("php /path/to/artisan stream $user_id", null, null, null, 50); 
    } 
} 

这里是流命令

class StreamingCommands extends Command 
{ 

    protected $signature = 'stream {id}'; 


    protected $description = 'create stream to twitter for one user'; 


    public function __construct() 
    { 
     parent::__construct(); 
    } 


    public function handle() 
    { 
     $id = $this->argument('id'); 
     $user = User::find($id); 
     Codebird::setConsumerKey($user->consumer_key, $user->consumer_secret); 
     $stream = new TwitterStream(); 
     $stream->setToken($user->twitterData->token, $user->twitterData->token_secret); 
     $keywordArray = array(); 
     $ids = array(); 
     foreach ($user->campaigns as $campaign) { 
      $ids[] = $campaign->id; 
      $keywordArray = array_merge($keywordArray, Keyword::whereCampaignId($campaign->id)->pluck('keyword')->toArray()); 
     } 
     $keywords = Keyword::whereIn('campaign_id', $ids)->where('rejected', 0)->get(); 
     $stream->setKeywords($keywords); 
     $stream->setStreamingCallback('processTweet'); 
     $keywords = implode(',', $keywordArray); 
     $this->info("start stream to user $id"); 
     $stream->statuses_filter('track=' . $keywords); 

    } 
} 

和cron作业 * * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1 和进度只是一个 $schedule->command('connect')->everyMinute();

+0

您是否收到任何错误讯息? –

+0

storage/logs/laravel.log? –

+0

绝对明确:( –

回答

0

至于评论和改变,你显然有两个不同的系统16和15,wi安装了不同的软件和依赖项。不幸的是,有没有简单的方法来解决这种小故障,你必须检查一切,它仍然可以是一个没有列出的PHP依赖项,甚至操作系统依赖和/或用户访问权限(你正在开始和杀死进程,是吗?工作还是缓存?),但是您的应用在16年内运行良好,因此您可能会忘记Laravel和Composer,并专注于PHP和OS层。

事情是,从这里,没有访问到您的服务器,这是很难猜测,所以很抱歉,如果它没有多大帮助。