【发布时间】:2015-10-26 23:57:47
【问题描述】:
我正在尝试将一个非常耗时的脚本从 php 端点调用到运行 matlab 的服务器。
我决定使用 phpseclib,因为很多人推荐它的可移植性。我开始怀疑我是否做出了正确的决定。也许你可以帮忙!
我遇到的问题是,无论我如何运行以下命令,它总是在完成之前返回 true。
$read = $sftp->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX);
$sftp->write("matlab -nodisplay -nodesktop -nosplash -logfile remote_matlab.out -r \"cd('/some_supporting_files'); some_function('/some_data_I_just_uploaded.txt'); exit;\"\r\n");
$read2 = $sftp->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX);
我也试过这样运行:
$sftp->exec("matlab -nodisplay -nodesktop -nosplash -logfile remote_matlab.out -r \"cd('/some_supporting_files'); some_function('/some_data_I_just_uploaded.txt'); exit;\"");
我已经测试了有关它的所有内容(例如,文件在那里,它不会出错等)它可以正确启动,但只是没有完成。我需要知道它何时完成,因为我需要下载它创建的文件。
如果我添加一个$sftp->setTimeout(40),它每次都有效,但如果他们不需要,我不希望有人等那么久,我也不能保证到那时脚本会回来。
一旦我得到这个工作,我仍然需要从 Angular ping 这个脚本。
这是我得到的日志:
"log": [
"<-",
"->",
"<- NET_SSH2_MSG_KEXINIT (since last: 0.158, network: 0.038s)",
"-> NET_SSH2_MSG_KEXINIT (since last: 0.001, network: 0s)",
"-> NET_SSH2_MSG_KEXDH_INIT (since last: 0.453, network: 0s)",
"<- NET_SSH2_MSG_KEXDH_REPLY (since last: 0.038, network: 0.038s)",
"-> NET_SSH2_MSG_NEWKEYS (since last: 0.457, network: 0s)",
"<- NET_SSH2_MSG_NEWKEYS (since last: 0, network: 0s)",
"-> NET_SSH2_MSG_SERVICE_REQUEST (since last: 0.006, network: 0s)",
"<- NET_SSH2_MSG_SERVICE_ACCEPT (since last: 0.105, network: 0.105s)",
"-> NET_SSH2_MSG_USERAUTH_REQUEST (since last: 0, network: 0s)",
"<- NET_SSH2_MSG_USERAUTH_SUCCESS (since last: 0.071, network: 0.071s)",
"-> NET_SSH2_MSG_CHANNEL_OPEN (since last: 0, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION (since last: 0.169, network: 0s)",
"-> NET_SSH2_MSG_CHANNEL_REQUEST (since last: 0, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST (since last: 0.043, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_SUCCESS (since last: 0, network: 0s)",
"-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.036, network: 0.036s)",
"-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.037, network: 0.037s)",
"-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.036, network: 0.036s)",
"-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.037, network: 0.036s)",
"-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.034, network: 0.034s)",
"-> NET_SSH2_MSG_CHANNEL_OPEN (since last: 0, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION (since last: 0.033, network: 0.033s)",
"-> NET_SSH2_MSG_CHANNEL_REQUEST (since last: 0, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_SUCCESS (since last: 0.041, network: 0.041s)",
"-> NET_SSH2_MSG_CHANNEL_REQUEST (since last: 0, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST (since last: 0.035, network: 0.035s)",
"<- NET_SSH2_MSG_CHANNEL_SUCCESS (since last: 0, network: 0s)",
"-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.003, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.032, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.01, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_DATA (since last: 2.3551, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.249, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.059, network: 0s)",
"-> NET_SSH2_MSG_CHANNEL_DATA (since last: 17.339, network: 0s)",
"<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.041, network: 0.041s)"
]
【问题讨论】:
-
我还尝试将
set_time_limit(240000);增加到 4 分钟以查看它是否在我结束时超时,但这没有任何作用。