繁体   English   中英

Bash 在 PHP 中使用 shell_exec 调用的脚本永远不会完成

[英]Bash script called with shell_exec in PHP never finish

我有一个站点,我希望用户能够在其中下载文件夹的所有内容。 因此,我制作了一个 php 脚本,让用户可以选择创建备份文件。 由于此文件可能相当大(数 GB 的数据),我将备份脚本制作为 bash 脚本,然后通过 php shell_exec 命令运行该脚本。

bash 脚本直接从 putty 终端和从 PHP 调用时都运行良好,但如果要备份的文件太多,则从 PHP 调用时(不是直接调用时)进程停止而没有完成。

调用脚本的 bash 命令是“bash backup_shell_zip”,调用 php 文件中的 shell_exec 命令是 shell_exec("bash backup_shell_zip 2>/dev/null >/dev/null &");

我可以看到,当脚本在我拥有大约 12 Gb 文件的大型站点上运行进行备份时,直接从腻子终端调用大约需要 12 分钟才能完成。 当从 php shell_exec 调用相同的脚本时,它会运行大约 2.5 分钟,然后在没有完成的情况下终止(备份了大约 3 Gb)。 当我从一个较小的示例(小于 3 Gb)运行相同的脚本时,它工作正常,但也完成了大约 2 分钟。

所以它看起来像进程(bash 脚本)终止,即使它在一段时间(或资源)使用后没有完成。 也许这与服务器如何关注进程有关,但我不是“服务器专家”,所以我希望有人能提供帮助;-)

/马尔特

调用 Bash 脚本的 PHP 脚本

shell_exec("bash backup_shell_zip 2>/dev/null >/dev/null &");

Bash 脚本

#!/bin/bash

BACKUPFILES="files"
DEST="backup"
CHUNKSIZE="500M"

# Filename
DAY=$(date +%F-%T)
ARCHIVE="backup_files"
FILENAME="$ARCHIVE-$DAY.zip"

# Print status
echo $(date +%T)
echo "Creating backup from $BACKUPFILES to $DEST/$FILENAME"

# Create ZIP-files
zip -r -s $CHUNKSIZE $DEST/$FILENAME $BACKUPFILES 

# Print status
echo $(date +%T)
echo "Finished"

事实证明,这是一个 apache 用户的资源问题,而不是给出超时的 shell 用户。 没有简单的解决方案,但我目前正在使用一个 cron-job,如果要备份的文件夹太大,它可以将任务分成几个较小的作业......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM