У меня работает.
Диски:
frayser@gentoo ~/doc/Answers/src/PHP $ disk
sda 111.790 GB
sdb 233.762 GB
sdc 233.762 GB
sdd 233.762 GB
sde 279.481 GB
------------------
Total: 1092.558 GB
Использование hde:
frayser@gentoo ~/doc/Answers/src/PHP $ l /dev/sde
brw-rw---- 1 root disk 8, 64 Dec 2 13:36 /dev/sde
Использование PHP:
frayser@gentoo ~/doc/Answers/src/PHP $ php lsdev.php
Z: brw-rw---- 1 root disk 8, 64 Dec 2 13:36 /dev/sde
скрипт:
frayser@gentoo ~/doc/Answers/src/PHP $ cat lsdev.php
<?php
$z=exec("ls -lr /dev/sde");
print "Z: " . $z . "\n";
?>
Обновление
Также работает с ls -al
.Пожалуйста, покажите свой сценарий.
Обновление 2
По линиям предложения chroot от ircmaxell: Предположим, что / dev, как видно из процесса PHP, было специальным файлом chroot для реального,И предположим, что / dev / sdf1 - съемное устройство.Когда вставляется sdf1 (медиа), система автоматически создает устройство в реальном / dev;но версия chroot не обновляется.Итак, чтобы обнаружить эту ситуацию, посмотрите на различия между / dev, как видно из PHP и из командной строки.
Один тест - ls -id
on / dev (из PHP и командной строки).Это печатает индекс / dev.Есть ли несоответствие в номерах инодов?
Можно ли удалить / dev / sdf1?Это установлено?Если он установлен;видит ли процесс PHP смонтированную файловую систему: ls $mount_point
из PHP it.
Существуют другие тесты chroot , перечисленные в Переполнение стека и в других местах;но я не нашел много хороших: если chroot сделан правильно, его трудно обнаружить.
Update 3
Это может быть то, что происходит: Устройство (/ dev / sdf1)требуется время, чтобы появиться после его создания;поэтому необходимо сделать паузу между созданием устройства и попыткой его монтирования:
До: устройство создано;но его там нет ...
Array
(
[0] => Logging out of session [sid: 4, target: iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e, portal: 172.16.0.1,3260]
[1] => Logout of [sid: 4, target: iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e, portal: 172.16.0.1,3260]: successful
[2] => Logging in to [iface: iface0, target: iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e, portal: 172.16.0.1,3260]
[3] => Login to [iface: iface0, target: iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e, portal: 172.16.0.1,3260]: successful
[4] => ls: cannot access /dev/sdg: No such file or directory
)
{ test -b /dev/sdg && sudo iscsiadm -m node -T iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e -u; sudo iscsiadm -m node -T iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e -l; ls -al /dev/sdg ;} 2>&1
После: добавлена 1-секундная пауза, и устройство (sdg) доступно ...
Array
(
[0] => Logging out of session [sid: 5, target: iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e, portal: 172.16.0.1,3260]
[1] => Logout of [sid: 5, target: iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e, portal: 172.16.0.1,3260]: successful
[2] => Logging in to [iface: iface0, target: iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e, portal: 172.16.0.1,3260]
[3] => Login to [iface: iface0, target: iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e, portal: 172.16.0.1,3260]: successful
[4] => brw-rw---- 1 root disk 8, 96 Dec 18 05:27 /dev/sdg
)
{ test -b /dev/sdg && sudo iscsiadm -m node -T iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e -u; sudo iscsiadm -m node -T iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e -l; sleep 1; ls -al /dev/sdg ;} 2>&1
PHP спауза ...
<code><pre>
<?php
$unit='sdg';
$reset="test -b /dev/sdg && sudo iscsiadm -m node -T iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e -u";
$connect="sudo iscsiadm -m node -T iqn.2004-08.org.frayser:gen2-dummy.ad4s0.dos.e -l";
$test="ls -al /dev/$unit";
$mountcommand = "{ $reset; $connect; sleep 1; $test ;} 2>&1";
exec("$mountcommand", $mountoutput, $mountresult);
print_r($mountoutput);
echo "\n$mountcommand\n\n";
?>
/ etc / sudoers настроен так же, как сообщалось в предыдущем вопросе о сбое монтирования из PHP .
Поэтому добавьте секунду или две функции sleep () после того, как iscsiadm создаст устройство.Сон может быть выполнен в PHP вместо exec () оболочки.