执行屏幕命令返回“无法创建目录”/ var / run / screen':文件存在`

时间:2013-10-11 23:03:12

标签: php linux centos gnu-screen

我不知道发生了什么。我可以通过exec()命令运行任何其他shell命令,它工作正常。这显然与某处的权限有关,但我不确定是什么。我在许多不同的服务器上尝试了这个,其中一些工作正常,有些则没有。所有人都在运行CentOS。安全模式始终处于关闭状态。

这是我试图开始工作的代码:

<?php
error_reporting(E_ALL);

if( ini_get('safe_mode') ){
   echo "safe mode is on";
}else{
   echo "safe mode is not on";
}
echo "\n\n";

echo "Start Server.....\n";

//exec("screen -clean", $err, $err1);
//exec("mkdir /var/test/tewst/");

exec("screen -dms test1 mkdir /var/test/test1/", $err, $err1);

print_r($err);
echo "\n" . $err1;
echo "\nCommands sent...";

?>

所有返回的是:

safe mode is not on

Start Server.....
Array
(
    [0] => Cannot make directory '/var/run/screen': File exists
)

1
Commands sent...

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

更新:这是由SELinux引起的。

-

原来这是一些奇怪的文件系统/用户权限错误。在PHP中通过ls -al /var/run命令运行exec()后,它返回了以下内容:

total 52
drwxrwxrwx. 23 root   root   4096 Oct 12 15:13 .
drwxr-xr-x. 22 root   root   4096 Oct 10 08:50 ..
d??????????  ? ?      ?         ?            ? ConsoleKit
drwxr-xr-x.  2 root   root   4096 Oct 11 18:13 abrt
-rw-r--r--.  1 root   root      5 Oct 11 18:13 abrtd.pid
-??????????  ? ?      ?         ?            ? acpid.pid
s??????????  ? ?      ?         ?            ? acpid.socket
-??????????  ? ?      ?         ?            ? atd.pid
-??????????  ? ?      ?         ?            ? auditd.pid
-??????????  ? ?      ?         ?            ? autofs-running
p??????????  ? ?      ?         ?            ? autofs.fifo-misc
p??????????  ? ?      ?         ?            ? autofs.fifo-net
-??????????  ? ?      ?         ?            ? autofs.pid
drwxr-xr-x.  2 root   root   4096 Feb 22  2013 certmonger
-??????????  ? ?      ?         ?            ? certmonger.pid
d??????????  ? ?      ?         ?            ? console
-??????????  ? ?      ?         ?            ? cron.reboot
-??????????  ? ?      ?         ?            ? crond.pid
d??????????  ? ?      ?         ?            ? cups
-??????????  ? ?      ?         ?            ? cupsd.pid
drwxr-xr-x.  2 root   root   4096 Oct 11 18:13 dbus
drwxr-xr-x.  2 root   root   4096 Feb 21  2013 faillock
d??????????  ? ?      ?         ?            ? hald
-??????????  ? ?      ?         ?            ? haldaemon.pid
drwx--x---.  2 root   apache 4096 Oct 12 15:26 httpd
d??????????  ? ?      ?         ?            ? lvm
s??????????  ? ?      ?         ?            ? mcelog-client
-??????????  ? ?      ?         ?            ? mcelog.pid
d??????????  ? ?      ?         ?            ? mdadm
-??????????  ? ?      ?         ?            ? messagebus.pid
drwxr-xr-x.  2 mysql  mysql  4096 Oct 11 18:13 mysqld
drwxrwxr-x.  2 root   root   4096 Feb 22  2013 netreport
d??????????  ? ?      ?         ?            ? plymouth
d??????????  ? ?      ?         ?            ? pm-utils
d??????????  ? ?      ?         ?            ? portreserve
-??????????  ? ?      ?         ?            ? rpc.statd.pid
-??????????  ? ?      ?         ?            ? rpcbind.lock
-??????????  ? ?      ?         ?            ? rpcbind.pid
s??????????  ? ?      ?         ?            ? rpcbind.sock
d??????????  ? ?      ?         ?            ? saslauthd
d??????????  ? ?      ?         ?            ? screen
d??????????  ? ?      ?         ?            ? sepermit
drwxr-xr-x.  2 root   root   4096 May 10 05:06 setrans
-??????????  ? ?      ?         ?            ? sm-notify.pid
-??????????  ? ?      ?         ?            ? sshd.pid
-??????????  ? ?      ?         ?            ? syslogd.pid
-??????????  ? ?      ?         ?            ? utmp
drwxr-xr-x.  2 root   root   4096 Feb 21  2013 winbindd

我通过删除目录并使/var/run权限为0777来修复它。这意味着Web服务器用户可以创建目录并按预期使用它。

rm /var/run/screen -R -f
chmod 0777 /var/run

我仍然不知道为什么会发生这种情况,也不知道为什么ls命令中到处都有问号。如果有人看到这个并且知道,请发表评论或回答解释原因。这将是一个很大的帮助,因为我知道有更多的错误。