我有一个命令行..当它从putty
运行时它可以工作,但是当从运行为root
的cronjob(webmin)运行命令时,命令挂起并且永远不会完成执行.. < / p>
/usr/bin/xvfb-run -a -s "-screen 0 640x480x16" /usr/bin/wkhtmltopdf /root/input.html /root/output.pdf
cronjob.php
echo shell_exec('/usr/bin/xvfb-run -a -s "-screen 0 640x480x16" /usr/bin/wkhtmltopdf /root/input.html /root/output.pdf');
cron作业的命令(作为root
运行)
php -f /var/cronjob.php
当cron作业从webmin
运行时,执行永远不会完成,但是当从putty
运行完全相同的命令时,它可以工作!这是输出
Loading page (1/2)
Printing pages (2/2)
Done
Exit with code 1 due to network error: ProtocolUnknownError
从putty
和webmin
运行命令(不带wkhtmltopdf)
echo shell_exec('/usr/bin/xvfb-run -a -s "-screen 0 640x480x16"');
这是输出
xvfb-run: usage error: need a command to run
Usage: xvfb-run [OPTION ...] COMMAND
Run COMMAND (usually an X client) in a virtual X server environment.
...
添加wkhtmltopdf
时,cronjob永远不会完成
此命令行无法通过cron作业
运行xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf -h
echo shell_exec('0 0 * * * * xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf /var/www/tmp/test.html /var/www/tmp/output.pdf >> /var/www/tmp/pdf.log 2>> /var/www/tmp/pdf.err');
pdf.err
sh: 1: 0: not found
答案 0 :(得分:0)
cron
正在运行的用户是什么?这可能是一个许可问题。尝试使用sudo
来创建完整文件。
所以在cron
有
sudo xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf input.html output.pdf
您应该考虑将xvfb-run放在/usr/bin/xvfb-run
或/bin/xvfb-run
这样的完整路径中,当您指定input.html和output.pdf时,请尝试将其完整路径设置为/home/user/Documents/input.html /home/user/Documents/output.pdf
< / p>
答案 1 :(得分:0)
以下PHP和crontab示例对我来说都是非特权用户和特权用户。该示例将STDOUT
重定向到/tmp/pdf.log
,将STDERR
重定向到/tmp/pdf.err
,以捕获和检查日志记录和错误消息。此示例假设您的PATH中有xvfb-run
和wkhtmltopdf
,也可以进行硬编码。
<强> PHP 强>
echo shell_exec('xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf /var/www/tmp/test.html /var/www/tmp/output.pdf >> /var/www/tmp/pdf.log 2>> /var/www/tmp/pdf.err');
<强>的crontab 强>
0 0 * * * xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf /var/www/test.html /var/www/output.pdf >> /var/www/tmp/pdf.log 2>> /var/www/tmp/pdf.err
STDOUT:wkhtmltopdf成功
运行时,/var/www/tmp/pdf.log
中出现以下内容,表示错误文件保持为空的成功:
$ cat /var/www/tmp/pdf.log
Loading page (1/2)
Printing pages (2/2)
Done
STDOUT:wkhtmltopdf错误
如果出现wkhtmltopdf
错误,它也会显示在STDOUT
中。如果输入文件(test.html
)不存在,则以下是/var/www/tmp/test.html
未找到的示例文件错误:
$ cat /var/www/tmp/pdf.log
Loading page (1/2)
Error: Failed loading page http:///var/www/tmp/test.html (sometimes it will work just to ignore this error with --ignore-load-errors)
[============================================================] 100%
尝试添加STDOUT
和STDERR
重定向以捕获并检查错误消息。
答案 2 :(得分:0)
我假设cron的(减少的)环境有问题,随后是xauth。
方式,我会尝试获得进步
(a)使用xvfb-run的--error-file=/tmp/xvfb.log
选项来查看它说的内容和
(b)使用xvfb-run
的选项--auth-file=/path/to/root_s_home/.Xauthority
另一种方法可能是从源头安装wkthtmltopdf
以获得真正的无头&#34;程序无需xvfb-run
(这些只是建议 - 我没有机会建立测试场景......)
答案 3 :(得分:0)
cronjob可能没有拉动用户的环境,因此不知道$ PATH实际包含什么。我发现我需要在我的crons中使用二进制文件的完整路径:
2 * * * /usr/bin/php -f /var/cronjob.php