<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>-Flyぁ梦- &#187; wkhtmltopdf</title>
	<atom:link href="http://blog.11034.org/tag/wkhtmltopdf/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.11034.org</link>
	<description></description>
	<lastBuildDate>Sun, 22 Jun 2025 08:59:05 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>linux的timeout处理wkhtmltopdf进程超时</title>
		<link>http://blog.11034.org/2014-10/linux_timeout.html</link>
		<comments>http://blog.11034.org/2014-10/linux_timeout.html#comments</comments>
		<pubDate>Sat, 25 Oct 2014 14:16:17 +0000</pubDate>
		<dc:creator><![CDATA[-Flyぁ梦-]]></dc:creator>
				<category><![CDATA[Life in Coding]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[timeout]]></category>
		<category><![CDATA[wkhtmltopdf]]></category>

		<guid isPermaLink="false">http://blog.11034.org/?p=2313</guid>
		<description><![CDATA[rails程序中要调用一个系统命令，但是这个系统命令在某些时候可能会处理很久也得不到结果，就需要控制超时情况。 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>rails程序中要调用一个系统命令，但是这个系统命令在某些时候可能会处理很久也得不到结果，就需要控制超时情况。</p>
<p><span id="more-2313"></span></p>
<p>一开始用ruby的<code class="markdown_inline_code">Timeout.timeout</code>方法，首先这方法不是很好用，然后这个方法会开启一个新的线程处理block中的代码，然后当发生超时情况时，即抛出了Timeout::Error异常，是可以处理超时情况，但是那个被开启的线程无法管理，甚至会影响到rails的终端（不能正常Ctrl-C结束了），并且调用系统命令所开启的新进程并不会被中止仍然是继续在后台执行。</p>
<p>听了quark大牛的方法，尽量不要使用ruby的timeout方法，使用靠谱又简单的linux timeout命令。</p>
<pre class="markdown_pre"><code>timeout -k 1 10s cmd 即可

不指定-s，就默认超时后向进程发送TERM信号，即普通的kill

-k 1是指，当10s之后向超时进程发出TERM信号后，在又1秒之后向超时进程发出KILL信号</code></pre>
<p>在ruby中，用ret = `timeout`就可以直接调用系统命令，然后根据ret返回值进行判断是否超时。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;wkhtmltopdf的分割线&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>PS：要用timeout处理的命令是wkhtmltopdf，将HTML页面转化为PDF的开源神器，但是在国内的环境中遇到HTML页面中有被墙了的页面的话，就是执行很久的时间（和浏览器一样），为了防止服务器处于假死状态，需要控制这个执行的时间。</p>
<p>然后顺便说下使用wkhtmltopdf过程中遇到的坑</p>
<ul>
<li>转化HTML中的图片，如果不成功的话，试着尝试使用<code class="markdown_inline_code">xvfb-run --server-args="-screen 0, 1280x1024x24" wkhtmltopdf</code></li>
<li>若转化过程中中文出了问题，检查linux中的微软雅黑（simsun.ttc）、宋体等字体文件是否存在<code class="markdown_inline_code">/usr/share/fonts/truetype</code>中</li>
<li>转化的HTML中必须要把那种全屏遮蔽的div、悬浮窗之类的删掉，大概因为PDF渲染颜色的原因，不仅转化需要超长时间而且打开PDF卡的要死</li>
</ul>
<h4  class="related_post_title">随便看一看</h4><ul class="related_post"><li>2011-07-05 -- <a target="_blank" href="http://blog.11034.org/2011-07/sora_no_kiseki_3rd.html" title="空之轨迹，the 3rd">空之轨迹，the 3rd</a></li><li>2017-05-03 -- <a target="_blank" href="http://blog.11034.org/2017-05/guilin.html" title="五一桂林阳朔游">五一桂林阳朔游</a></li><li>2015-10-12 -- <a target="_blank" href="http://blog.11034.org/2015-10/taipei.html" title="我在台北抗台风">我在台北抗台风</a></li><li>2012-06-28 -- <a target="_blank" href="http://blog.11034.org/2012-06/get_video_cover_image.html" title="各大视频网站的视频截图抓取">各大视频网站的视频截图抓取</a></li><li>2014-12-21 -- <a target="_blank" href="http://blog.11034.org/2014-12/ruby_encoding.html" title="Ruby字符串的编码">Ruby字符串的编码</a></li></ul><h4 class="related_post_title">看看 Life in Coding , ruby on rails </h4><ul class="related_post"><li>2016-09-09 -- <a target="_blank" href="http://blog.11034.org/2016-09/jabber_and_xmpp.html" title="jabber和XMPP简述原理">jabber和XMPP简述原理</a></li><li>2015-08-12 -- <a target="_blank" href="http://blog.11034.org/2015-08/rails_nginx.html" title="Liunx下搭建Rails和Nginx环境">Liunx下搭建Rails和Nginx环境</a></li><li>2015-04-09 -- <a target="_blank" href="http://blog.11034.org/2015-04/json_ascii.html" title="JSON中出现解析错误的原因之一：不可打印字符">JSON中出现解析错误的原因之一：不可打印字符</a></li><li>2015-01-07 -- <a target="_blank" href="http://blog.11034.org/2015-01/prevent_db_duplicate.html" title="防止数据库数据重复的几种方法">防止数据库数据重复的几种方法</a></li><li>2014-12-21 -- <a target="_blank" href="http://blog.11034.org/2014-12/ruby_encoding.html" title="Ruby字符串的编码">Ruby字符串的编码</a></li>]]></content:encoded>
			<wfw:commentRss>http://blog.11034.org/2014-10/linux_timeout.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
