2010-07-16 27 views
2

我需要這個cron作業來執行我的shell,就像它在命令行上運行一樣。在Ubuntu上使用Cron和Cake Console

我閱讀了另一個關於此問題的問題,但是我的基於控制檯的cron作業仍然無法正常工作。我想發佈一些代碼和它輸出的內容,也許有人會告訴我發生了什麼事情。

首先,這是在Cake 1.3上。我在Ubuntu 9.10上運行。我嘗試了Cake Book中描述的shell-script method

我還沒有建立任何特殊的用戶帳戶來運行腳本。蛋糕控制檯在我的PATH上(對於Ubuntu內置用戶)。

another question I found中,他們報告-app參數沒有做任何事情。對我來說,這似乎也是如此。

我的殼工作,它需要運行這個時在命令行:

./vendors/cakeshell subscription_reminder -cli /usr/bin -app /var/www/www.example.org/htdocs/app -console /var/www/www.example.org/htdocs/cake/console/cake 

從這個輸出看起來像:

Welcome to CakePHP v1.3.2 Console 
--------------------------------------------------------------- 
App : app 
Path: /var/www/www.directory.sdcweb.org/htdocs/app 
--------------------------------------------------------------- 

我記錄我的cron作業輸出一個文件和輸出看起來不同,像這樣:

編輯:我注意到,這下面的代碼塊只是CakePHP的蛋糕shell腳本,如果你打開蛋糕/控制檯/ cak在文本編輯器中,您應該找到以下腳本。

################################################################################ 
# 
# Bake is a shell script for running CakePHP bake script 
# PHP versions 4 and 5 
# 
# CakePHP(tm) : Rapid Development Framework (http://cakephp.org) 
# Copyright 2005-2010, Cake Software Foundation, Inc. 
# 
# Licensed under The MIT License 
# Redistributions of files must retain the above copyright notice. 
# 
# @copyright   Copyright 2005-2010, Cake Software Foundation, Inc. 
# @link       http://cakephp.org CakePHP(tm) Project 
# @package      cake 
# @subpackage   cake.cake.console 
# @since        CakePHP(tm) v 1.2.0.5012 
# @license      MIT License (http://www.opensource.org/licenses/mit-license.php) 
# 
################################################################################ 
LIB=${0/%cake/} 
APP=`pwd` 

exec php -q ${LIB}cake.php -working "${APP}" "[email protected]" 

exit; 

我的crontab是這樣的:

41 20 * * * /var/www/www.example.org/htdocs/app/vendors/cakeshell subscription_reminder -cli /usr/bin -app /var/www/www.example.org/htdocs/app -console /var/www/www.example.org/htdocs/cake/console/cake >> /home/ubuntu/cron-log 
+0

這是什麼問題? – 2010-07-16 21:25:40

+0

我不明白爲什麼從cron-job運行我的shell不像我在命令行上運行它時那樣工作。查看我帖子中的第一個代碼片段。 – the0ther 2010-07-16 21:44:07

回答

1

那麼,經過多一點的工作後,我終於到達了一個crontab,它做我想做的事情。它看起來像這樣:

35 01 * * * cd /var/www/www.example.org/htdocs/app; ../cake/console/cake subscription_reminder 

它不僅工作,但它也是更多的可讀性。

2

首先,您的cronjob以不同的cwd運行腳本,這可能會影響行爲。將其更改爲

41 20 * * * cd /var/www/www.example.org/htdocs/app/; ./vendors/cakeshell .... 

但也許還有別的:

的「CakePHP的控制檯」,cakeshell,可能會檢查,如果它的標準輸入連接到終端。如果不是,它會以其他非交互模式進行。

問題是某些程序可以在終端(tty)與您通話,而其他程序不能。

根據具體情況,有些人可以同時兼顧。

grep是典型的非交互式

vipiconano通常僅用於交互:

$ vi > test3 
Vim: Warning: Output is not to a terminal 
$ echo bla | vi 
Vim: Warning: Input is not from a terminal 
$ vi < test3 
Vim: Warning: Input is not from a terminal 

bash既可以做運行腳本時,互動在爲您服務時(非交互式終端)

所以至少有答案,爲什麼完全相同的命令和環境,可以給完全不同的輸出。嘗試像你一樣從命令行啓動它,但重定向來自管道或文件的輸入,並查看有哪些更改。

+0

謝謝,這是一些很好的信息,總是欣賞來自* nix大師的聆聽! – the0ther 2010-07-17 01:37:57