我在 VirtualBox 上有一个 CentOS 服务器(使用 Vagrant),它正在运行一个非常长的 php 脚本(最多可能需要 5 周才能完全完成)该脚本使用 cygwin 通过 ssh 运行。
脚本运行良好,但是在某些随机点,服务器会收到 ctrl-C,但我不知道它来自哪里?
该脚本还可以使用多个进程运行popen()
该脚本通过 cygwin 上的 cli 运行,可以使用 PHPstorm 8 EAP 进行调试。
以下是有关该设置的一些技术细节。
注意:所有软件包都通过 cronjob 自动更新。
OS: CentOS 6.5
PHP: 5.4.32 (remi repo)
Apache: 2.2.15 (CentOS repo)
MariaDB: 5.5.39 (MariaDB repo)
Other packages:
PhpMyAdmin (remi)
Webmin (Webmin)
OpenSSL (CentOS)
Bind (CentOS)
screen (CentOS)
man (CentOS)
vim (CentOS)
git (CentOS)
zlib-devel (CentOS)
Other installed RPMs:
libarchive2-2.8.4 (Martin-Juhl)
bsdtar-2.8.4 (Martin-Juhl)
php-plugins (yum installed):
php-common
php-tidy
php-pecl-xdebug
php-mbstring
php-mysqlnd
php-gd
php-mcrypt
Installed group-installs:
Development tools
Host-details:
Windows-8.1
VirtualBox-4.3.12
Vagrant-1.6.5
答案1
通过远程运行脚本,您可以添加多层复杂性,每层都有自己的超时。
- Shell 空闲超时 (TMOUT)
- SSH 活跃阈值 (ClientAliveCountMax)
- TCP 保持活动限制
- PHP运行时间限制(最大执行时间)
- 您的客户端机器可能崩溃,您意外关闭窗口等等......
您的工作负载似乎主要是基于批处理的。请研究从服务器内部运行此脚本以避免外部依赖。如果您依赖于已安装的文件夹,请按照 Dennis 的建议进行操作,并配置 initscript 顺序/依赖项和/或研究一段时间,让您的脚本继续检查文件夹可用性一段时间(指定重试限制,以便它不会在启动时卡住)。