Linux“at”命令在从shell运行时工作正常,但在从web服务器运行时失败

我使用“at”来设置用户在RHEL6.4上设置的未来操作。 我从php使用的命令是

exec("echo \"php $script_path\" | at $run_time"); 

脚本path已被设置为具有运行时间。 当我从一个用php -a启动的shell运行时,这个工作正常。 当它从networking服务器运行时,创build该作业,但似乎不运行。

  1. 我已经validation:apache用户对目录及其中的所有文件夹具有完全的读写执行权限。

  2. exec命令正在运行(终于创build了at作业。)

  3. 我已经validation了这项工作是在服务器上寻找正确的path。

我不知道我还能做些什么来使命令正确运行脚本。 有什么build议么?

感谢您的帮助。


更新:我继续创build一个页面,链接到我试图自动运行的脚本,并以这种方式启动它。 当以这种方式运行Apache时,脚本本身工作正常,这意味着“at”正在做的事情。 我运行print_r($ _ ENV)来确定正在使用的环境variables。 唯一出现的是一个数字1。


更新2:我在每个工作上运行了一个-c,这个工作似乎永远不会运行,而且工作得很好。 那个工作的人似乎有更多的内容,而不是那个工作的内容。 65工作(从壳运行)

 at -c 65 #!/bin/sh # atrun uid=0 gid=0 # mail root 0 umask 22 HOSTNAME=ipdb-sys.ipdb.lab; export HOSTNAME SHELL=/bin/bash; export SHELL HISTSIZE=1000; export HISTSIZE SSH_CLIENT=143.166.167.124\ 53008\ 22; export SSH_CLIENT QTDIR=/usr/lib64/qt-3.3; export QTDIR QTINC=/usr/lib64/qt-3.3/include; export QTINC SSH_TTY=/dev/pts/0; export SSH_TTY USER=root; export USER LS_COLORS=rs=0:di=01\;34:ln=01\;36:mh=00:pi=40\;33:so=01\;35:do=01\;35:bd=40\;33\;01:cd=40\;33\;01:or=40\;31\;01:mi=01\;05\;37\;41:su=37\;41:sg=30\;43:ca=30\;41:tw=30\;42:ow=34\;42:st=37\;44:ex=01\;32:\*.tar=01\;31:\*.tgz=01\;31:\*.arj=01\;31:\*.taz=01\;31:\*.lzh=01\;31:\*.lzma=01\;31:\*.tlz=01\;31:\*.txz=01\;31:\*.zip=01\;31:\*.z=01\;31:\*.Z=01\;31:\*.dz=01\;31:\*.gz=01\;31:\*.lz=01\;31:\*.xz=01\;31:\*.bz2=01\;31:\*.tbz=01\;31:\*.tbz2=01\;31:\*.bz=01\;31:\*.tz=01\;31:\*.deb=01\;31:\*.rpm=01\;31:\*.jar=01\;31:\*.rar=01\;31:\*.ace=01\;31:\*.zoo=01\;31:\*.cpio=01\;31:\*.7z=01\;31:\*.rz=01\;31:\*.jpg=01\;35:\*.jpeg=01\;35:\*.gif=01\;35:\*.bmp=01\;35:\*.pbm=01\;35:\*.pgm=01\;35:\*.ppm=01\;35:\*.tga=01\;35:\*.xbm=01\;35:\*.xpm=01\;35:\*.tif=01\;35:\*.tiff=01\;35:\*.png=01\;35:\*.svg=01\;35:\*.svgz=01\;35:\*.mng=01\;35:\*.pcx=01\;35:\*.mov=01\;35:\*.mpg=01\;35:\*.mpeg=01\;35:\*.m2v=01\;35:\*.mkv=01\;35:\*.ogm=01\;35:\*.mp4=01\;35:\*.m4v=01\;35:\*.mp4v=01\;35:\*.vob=01\;35:\*.qt=01\;35:\*.nuv=01\;35:\*.wmv=01\;35:\*.asf=01\;35:\*.rm=01\;35:\*.rmvb=01\;35:\*.flc=01\;35:\*.avi=01\;35:\*.fli=01\;35:\*.flv=01\;35:\*.gl=01\;35:\*.dl=01\;35:\*.xcf=01\;35:\*.xwd=01\;35:\*.yuv=01\;35:\*.cgm=01\;35:\*.emf=01\;35:\*.axv=01\;35:\*.anx=01\;35:\*.ogv=01\;35:\*.ogx=01\;35:\*.aac=01\;36:\*.au=01\;36:\*.flac=01\;36:\*.mid=01\;36:\*.midi=01\;36:\*.mka=01\;36:\*.mp3=01\;36:\*.mpc=01\;36:\*.ogg=01\;36:\*.ra=01\;36:\*.wav=01\;36:\*.axa=01\;36:\*.oga=01\;36:\*.spx=01\;36:\*.xspf=01\;36:; export LS_COLORS WEBROOT=/var/www; export WEBROOT MAIL=/var/spool/mail/root; export MAIL PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/dell/srvadmin/bin:/opt/dell/srvadmin/sbin:/root/bin; export PATH PWD=/root; export PWD LANG=en_US.UTF-8; export LANG MODULEPATH=/usr/share/Modules/modulefiles:/etc/modulefiles; export MODULEPATH LOADEDMODULES=; export LOADEDMODULES HISTCONTROL=ignoredups; export HISTCONTROL SHLVL=1; export SHLVL HOME=/root; export HOME LOGNAME=root; export LOGNAME QTLIB=/usr/lib64/qt-3.3/lib; export QTLIB CVS_RSH=ssh; export CVS_RSH SSH_CONNECTION=143.166.167.124\ 53008\ 10.180.57.93\ 22; export SSH_CONNECTION MODULESHOME=/usr/share/Modules; export MODULESHOME LESSOPEN=\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES module=\(\)\ {\ \ eval\ \`/usr/bin/modulecmd\ bash\ \$\*\`" "}; export module cd /root || { echo 'Execution directory inaccessible' >&2 exit 1 } ${SHELL:-/bin/sh} << 'marcinDELIMITER145f56ce' php /var/www/ipdb5.0/unattend/release.php marcinDELIMITER145f56ce 

工作68没有。

 at -c 68 #!/bin/sh # atrun uid=48 gid=48 # mail apache 1 umask 22 PATH=/sbin:/usr/sbin:/bin:/usr/bin; export PATH RUNLEVEL=3; export RUNLEVEL runlevel=3; export runlevel PWD=/var/www/ipdb5.0/run; export PWD LANGSH_SOURCED=1; export LANGSH_SOURCED LANG=C; export LANG PREVLEVEL=N; export PREVLEVEL previous=N; export previous CONSOLETYPE=vt; export CONSOLETYPE SHLVL=4; export SHLVL UPSTART_INSTANCE=; export UPSTART_INSTANCE UPSTART_EVENTS=runlevel; export UPSTART_EVENTS UPSTART_JOB=rc; export UPSTART_JOB cd /var/www/ipdb5\.0/run || { echo 'Execution directory inaccessible' >&2 exit 1 } ${SHELL:-/bin/sh} << 'marcinDELIMITER348f4254' php /usr/bin/php /var/www/ipdb5.0/unattend/release.php marcinDELIMITER348f4254 

不知道你们是否可以比这更多地发挥出来,但是我觉得发表看看不会有什么不好的。

终于找到了答案。 事实证明,你需要三件事情是真实的,我从来没有设置过。

  1. 你需要有你调用的程序的绝对路径(PHP必须是/ usr / bin / php) – 感谢mti2935。
  2. 你需要为你的apache用户设置一个shell。 – 感谢让我开始在这个方向craniumonempty。 我必须运行的命令是: sudo chsh -s /bin/bash username
  3. 最后,你必须有一个由www-data组和apache用户创建的at.allow文件。 (确保没有at.deny文件,因为这将抵消允许。)。

一旦所有这些都设置了将在您的网络服务器成功运行。 另外,一定要有主要职位上的基础知识。 对正在运行的脚本执行apache读/写/执行操作,确保脚本本身没有在at运行,并验证at作业正在创建。

谢谢大家的帮助。