0

我正在通过命令行执行 PHP 脚本,对于特定用户,该脚本在命令行上执行时运行良好,但是当将完全相同的命令放入同一用户的 crontab 时,会返回 PHP iconv 错误。

命令行正在使用 Yii 框架和 Zend Lucene 库,但我不确定这是否相关。

我已经在 crontab 行中将所有可执行文件和脚本路径设为绝对路径,并且可以验证它在直接在命令行上执行时是否有效。

我将实际的 PHP 调用包装在一个单行的 shell 脚本中,正如我在这里其他地方读到的那样,这为某人解决了类似的问题,但没有任何乐趣。

在命令行上成功执行的命令是:

/bin/sh /var/www/yii-projects/projectname/protected/scripts/buildIndex.sh >> /var/lucene/lucene.log

buildIndex.sh 脚本的内容是:

/usr/bin/php /var/www/yii-projects/projectname/protected/scripts/cron.php lucene buildIndex

crontab 行是:

*/10 * * * * /bin/sh /var/www/yii-projects/projectname/protected/scripts/buildIndex.sh >> /var/lucene/lucene.log

crontab 执行时日志显示的错误是:

PHP Error[8]: iconv(): Detected an illegal character in input string
    in file /var/www/yii-projects/projectname/protected/vendors/Zend/Search/Lucene/Analysis/Analyzer/Common/Text.php at line 58

0 /var/www/yii-projects/projectname/protected/vendors/Zend/Search/Lucene/Analysis/Analyzer/Common/Text.php(58): iconv()

1 /var/www/yii-projects/projectname/protected/vendors/Zend/Search/Lucene/Analysis/Analyzer.php(125): Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive->reset()

2 /var/www/yii-projects/projectname/protected/vendors/Zend/Search/Lucene/Index/SegmentWriter/DocumentWriter.php(98): Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive->setInput()

3 /var/www/yii-projects/projectname/protected/vendors/Zend/Search/Lucene/Index/Writer.php(244): Zend_Search_Lucene_Index_SegmentWriter_DocumentWriter->addDocument()

4 /var/www/yii-projects/projectname/protected/vendors/Zend/Search/Lucene.php(1410): Zend_Search_Lucene_Index_Writer->addDocument()

5 /var/www/yii-projects/projectname/protected/vendors/Zend/Search/Lucene/Proxy.php(500): Zend_Search_Lucene->addDocument()

6 /var/www/yii-projects/projectname/protected/commands/LuceneCommand.php(97): Zend_Search_Lucene_Proxy->addDocument()

7 unknown(0): LuceneCommand->actionBuildIndex()

8 /var/www/yii-projects/yii-1.1.12.b600af/framework/console/CConsoleCommand.php(173): ReflectionMethod->invokeArgs()

9 /var/www/yii-projects/yii-1.1.12.b600af/framework/console/CConsoleCommandRunner.php(68): LuceneCommand->run()

10 /var/www/yii-projects/yii-1.1.12.b600af/framework/console/CConsoleApplication.php(92): CConsoleCommandRunner->run()

11 /var/www/yii-projects/yii-1.1.12.b600af/framework/base/CApplication.php(162): CConsoleApplication->processRequest()

12 /var/www/yii-projects/projectname/protected/scripts/cron.php(14): CConsoleApplication->run()

考虑到所采取的措施,以及在两种情况下用户相同的事实,我想不出有什么不同的原因。

请帮忙!

谢谢

编辑 - 我还应该确认被索引的基础数据没有改变 - 我已经多次交替执行这两个场景并一致地获得上述结果。

4

2 回答 2

0

尝试使用-f开关并直接从 crontab 中:

/usr/bin/php -f /var/www/yii-projects/projectname/protected/scripts/cron.php lucene buildIndex

您还确定您传递的命令文本是 UTF8 格式吗?那里可能有其他符号吗?也许是BOM?您可以使用 HEX 编辑器检查这一点 - 打开您的 shell 脚本,省略所有字母并查看剩下的内容。通常 UTF8 中的 BOM 是EF BB BF,但它可能根本不是 bom。检查一下。

于 2013-08-28T10:37:51.823 回答
0

必要的 shell 环境变量不适用于 crontab 作业,因此将其添加到 irishhp 用户的 crontab 中:

PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

LANG=en_US.UTF-8

解决了。

于 2013-09-10T08:25:19.713 回答