【问题标题】:php exec crontab not workingphp exec crontab 不工作
【发布时间】:2011-12-14 15:05:03
【问题描述】:

我在本地 CentOS 5.3 服务器上尝试,当我尝试从 apache webserver 在我的 php 代码中执行以下行时

exec("crontab -l", $output, $arg); $arg 回复 127 (command not found code)

然后我改了下面的代码

exec("/usr/bin/crontab -l", $output, $arg); $arg 回复 126(权限问题代码)

这是我目前的许可 /usr/bin/crontab -rwsr-sr-x 1 root root 311288 2007 年 3 月 15 日 /usr/bin/crontab。
并且没有 /etc/cron.allow 和 /etc/cron.deny 文件。

我已经在 php.ini 中关闭了Safe_mode。有什么解决这个问题的建议吗?

/////////////////////////////////////// /////////////////////////////

我注意到我的问题与 selinux 有关。 它正在工作,当我禁用 selinux 时

echo 0 > /selinux/enforce

但我不想禁用 selinux,selinux 中是否有任何选项可以允许 crontab 来自 apache?

【问题讨论】:

  • apache用户没有执行crontab的权限。
  • 是默认设置吗?我之前安装了 2 台 Centos 服务器,无需更改任何内容。它可以从我的 php 页面调用 exec crontab。

标签: php permissions cron exec crontab


【解决方案1】:
  1. 将 /usr/bin 添加到您的 shell 环境路径
  2. 将 crontab 添加到与网络服务器相同的组中
  3. 尝试在 php exec("echo $PATH") 中查看路径变量。您也可以查找 unsetenv 并暂时禁用它

您可以在php错误日志中查看错误的详细描述,但正如您所说您熟悉Linux,我无法教您有关用户权限管理的内容。关于 env 变量和路径变量的注释,当您运行程序时,并不总是确定 env 变量会被导出。您的问题可能就是这种情况。这意味着要么操作系统坏了,要么你必须手动将环境变量附加到你的程序中。一种解决方法是查看 shell 在哪里寻找程序并符号链接程序。在您的错误日志中,crontab 似乎位于文件夹 /usr/bin 中。这似乎也不是一个编程问题。在 server.stackexchange 询问为什么找不到 crontab。例如我的环境看起来像这样:

LC_PAPER=de_DE LC_ADDRESS=de_DE LC_MONETARY=de_DE AF_PIDDIR=/tmp/af-piddir UPNP_ROOT=upnpav:// 外壳=/bin/sh 期限=xterm DISABLE_GATEWAY=1 GTK2_RC_FILES=/etc/hildon/theme/gtk-2.0/gtkrc TMPDIR=/var/tmp MMC_SWAP_LOCATION=/媒体/mmc1 LC_NUMERIC=de_DE MMC_MOUNTPOINT=/媒体/mmc1 OLDPWD=/根 HILDON_FM_OBEX_ROOT=obex:// LAUNCHWRAPPER_NICE_KILL=/etc/osso-af-init/nice-kill-launch-wrapper.sh INTERNAL_MMC_MOUNTPOINT=/home/user/MyDocs OSSO_VERSION=RX-51_2009SE_20.2010.36-2_PR_MR0 用户=根 LS_COLORS=no=00:fi=00:di=00;36:ln=00;35:pi=40;33:so=01;35:bd=40;32;00:cd=40;32;00: or=01;05;37;41:mi=01;05;37;41:ex=00;33:.cmd=00;32:.exe=00;32: .com=00;32:.btm=00;32:.bat=00;32:.sh=00;32:.csh=00;32:.tar=00;31:.tgz=00;31:.arj=00;31:.taz=00;31:.lzh=00; 31:.zip=00;31:.z=00;31:.Z=00;31:.gz=00;31:.bz2= 00;31:.bz=00;31:.tz=00;31:.rpm=00;31:.cpio=00;31: .jpg=00;35:.gif=00;35:.bmp=00;35:.xbm=00;35:.xpm=00;35:.png=00;35:.tif=00;35: LC_TELEPHONE=de_DE SESSION_BUS_PID_FILE=/tmp/dbus_session_bus.pid.user OSSO_PRODUCT_HARDWARE=RX-51 STATESAVEDIR=/tmp/osso-appl-states LAUNCHWRAPPER_NICE_TRYRESTART=/etc/osso-af-init/nice-launch-wrapper-tryrestart.sh OSSO_PRODUCT_FULL_NAME=诺基亚 N900 OSSO_PRODUCT_RELEASE_FULL_NAME=Maemo 5 OSSO_PRODUCT_RELEASE_NAME=Maemo 5 MYDOCSDIR=/home/user/MyDocs PATH=/usr/bin/gnu:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin LC_MESSAGES=de_DE OSSO_PRODUCT_SHORT_NAME=诺基亚 N900 SESSION_BUS_ADDRESS_FILE=/tmp/session_bus_address.user LC_IDENTIFICATION=de_DE PWD=/home/user/MyDocs EDITOR=/usr/bin/nano -w -c LANG=de_DE 错误=0 LC_MEASUREMENT=de_DE PS1=[\033[1;36m][[\033[0;36m]\u\h[\033[0;37m]:\w[\033[1;36m]][\033[m]$ [\033[0;37;00m] ILLEGAL_FAT_CHARS=/:*?| OSSO_PRODUCT_KEYBOARD=德语 AF_DEFINES_SOURCED=1 SHLVL=1 家=/根 SDL_AUDIODRIVER=脉冲 OSSO_SWAP=/home/user/MyDocs OSSO_PRODUCT_RELEASE_VERSION=20.2010.36-2 LS_OPTIONS=--颜色 LAUNCHWRAPPER_TRYRESTART=/etc/osso-af-init/launch-wrapper-tryrestart.sh OSSO_PRODUCT_NAME=N900 AF_INIT_DIR=/etc/osso-af-init MMC_DEVICE_FILE=/dev/mmcblk0p1 LOGNAME=root DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-eCbOI2qrVP,guid=cd1dea104334a338a9007b9700000014 LAUNCHWRAPPER=/etc/osso-af-init/launch-wrapper.sh OSSO_PRODUCT_WLAN_CHANNEL=fcc/us MAX_FILENAME_LENGTH=255 显示=:0.0 LAUNCHWRAPPER_NICE=/etc/osso-af-init/nice-launch-wrapper.sh LC_TIME=de_DE INTERNAL_MMC_SWAP_LOCATION=/home/user/MyDocs LC_NAME=de_DE OSSO_PRODUCT_REGION=德国 _=/usr/bin/gnu/env

只需在提示符中输入 env。

【讨论】:

  • 你能告诉更详细的步骤吗?
  • 我的网络服务器以 apache 用户身份运行。下面是 /var/log/httpd/error_log sh: /usr/bin/crontab: Permission denied sh: crontab: command not found
  • 我把上面的脚本放到了test.php,这个问题只在我从我的浏览器运行时出现。我用非root账号通过putty登录ssh,输入命令“php test.php”,执行成功。
  • 尝试在 php exec("echo $PATH") 中查看路径变量。您也可以查找 unsetenv 并暂时禁用它。
  • "/sbin:/usr/sbin:/bin:/usr/bin" 输出来自 exec('echo $PATH', $output, $arg);
猜你喜欢
  • 1970-01-01
  • 2011-12-21
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多