【发布时间】:2015-11-10 05:14:54
【问题描述】:
我有一个 PHP 控制台脚本,它通过 cron 调用,它本身会创建一个目录的 tar 文件。
通过 cron 调用 PHP 脚本时,未正确创建 tar 文件。查看tar文件时报如下错误:
gzip: stdin: unexpected end of file
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
通过控制台手动调用 PHP 脚本时,会正确创建 tar 文件。 cron 日志输出显示没有错误。
这里是 PHP 脚本的 tar 调用。
exec("cd $this->backupTempFolderName/$id; tar -czf ../../$this->backupFolderName/$tarFileName $dbDumpFileName documents");
有人知道为什么 tar 在手动调用时会正确创建而在通过 cron 调用时会失败吗?
更新:通过 cron 创建 tar 文件时给出的错误是:
tar: ../../backup/20150819-060003.tar.gz: Wrote only 4096 of 10240 bytes
tar: Error is not recoverable: exiting now
有时错误是:
tar: ../../backup/20150819-054002.tar.gz: Cannot write: Broken pipe
tar: Error is not recoverable: exiting now
如前所述,通过 cron 执行时会创建 tar 文件,但始终为正确大小的 50%(手动执行脚本时):
-rw-r--r-- 1 gtz gtz 1596099468 Aug 19 06:25 20150819-042330.tar.gz <- Manually called skript, working tar
-rw-r--r-- 1 gtz gtz 858570752 Aug 19 07:21 20150819-052002.tar.gz <- Script called via cron, broken tar
更新 2
在根据此处给出的输入进行进一步研究后,可能应该补充一点,调用脚本的 cron 脚本正在虚拟专用服务器上运行 - 我怀疑主机未记录的 cron 作业可能存在一些限制(仅文档中给出了最小重复时间的限制)。
【问题讨论】:
-
确切的 crontab 条目是什么?这些变量
$this->backTempFolderName/$id, $this->backupFolderName/$tarFileName, $dbDumpFileName扩展为什么? -
变量只提取到带有文件夹路径的字符串(工作正常,因为脚本在手动调用时可以正常工作)并且玉米作业条目是
59 23 * * 0 cd path/to/application; /opt/php53/bin/php app/console giz:backup >/paht/to/application/app/logs/backup-output.log。backup-output.log本身没有错误,因为 php 脚本本身似乎工作正常。 -
但是扩展路径有空格吗?是相对的还是绝对的? Crown 作业是否以同一用户身份运行? Crown用户有写文件的权限吗?
-
0) 检查系统日志。 cronjob(它是否通过 PHP 运行?)可能已终止,因为它超出了某些资源限制(时间?)
-
在运行
tar命令之前检查磁盘空间并记录它。我怀疑您在 cron 运行时可能缺少可用磁盘空间。