不能从cronjob运行wkhtmltopdf

时间:2015-03-26 14:53:37

标签: linux pdf cron wkhtmltopdf

我有一个命令行..当它从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

puttywebmin运行命令(不带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永远不会完成

更新II

此命令行无法通过cron作业

运行
xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf -h

@ Grokify

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

4 个答案:

答案 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-runwkhtmltopdf,也可以进行硬编码。

<强> 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%

尝试添加STDOUTSTDERR重定向以捕获并检查错误消息。

答案 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