微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Linux“at”命令在从shell运行时工作正常但在从webserver运行时失败

我正在使用“at”来设置用户在RHEL6.4上设置的未来操作.
我在PHP中使用的命令是

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

脚本路径已设置为运行时的位置.当我从一个PHP -a启动的shell运行时,这可以100%正常工作.当它从Web服务器运行时,创建了作业,但它似乎没有运行.

>我已经验证:apache用户具有完整的读写执行权
    访问目录和其中的所有文件夹.
> exec命令
    正在运行(毕竟创建了at作业.)
>我已经验证了
    工作正在服务器上寻找正确的路径.

我不知道我还能做些什么来获得正确运行脚本的命令.有什么建议?

谢谢您的帮助.

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

更新2:
我在每个工作上运行了一个-c,一个似乎永远不会运行的工作,以及一个工作正常的工作.似乎有更多的内容在那个有效的VS和那个没有的内容上. 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

不知道你们这些人是否可以从中获得更多的东西,但是我觉得发帖看看也不会有什么坏处.

解决方法:

终于找到了答案.事实证明,你需要三件事,而我之前没有设置过.

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

设置完所有这些后,at将从您的网络服务器成功运行.另外,一定要掌握我在主帖中介绍的基础知识.为您正在运行的脚本提供读/写/执行apache,确保脚本本身无需运行就可以运行,并验证是否正在创建at作业.

谢谢大家的帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐