前天写了个程序用来生成一个静态的 twitter timeline 页面,但最后一步没有完成,也就是设置 crontab 让这个程序隔一段时间执行一次。否则需要我手动登陆服务器来运行程序就太蠢了。
过去我用过 crontab,但次数不多,而且这种东西都是设置一下就不再碰的,所以相关的东西我早就忘记了。而且我印象里也没有设置过需要调用第三方库的程序,因此周一的时候就配置失败了。
过去我尝试 crontab 的时候,系统会把程序的输出结果发到我的邮箱里。这次却一直没有动静。我怀疑过是不是系统本身的问题,但安装系统的时候我都是走的标准流程,crontab 相关的东西碰都没碰。但为什么一直收不到邮件让我非常费解。
后来我考虑到是不是邮件被发送到服务器本地去了。于是去了我的 Maildir 目录下看看,果然几封邮件都在这里。这让我比较奇怪,我设置的 Exim 4 应该运作正常才对,我的服务器上的 WordPress 程序就可以正常发送电子邮件。后来看了一下收件人地址,发现是 liufeng@li413-79.members.linode.com,这或许就是问题,看来有那个相关的地方我没有设置好。
看了一下邮件的内容,果然说是找不到 twitter gem,看来运行的时候 crontab 找不到 RVM 安装的东西。搜索了一下,经过几次尝试后,发现这篇文章里讲的东西十分有用。文章中的方法是通过运行 bash 读取相关的变量设置,然后像普通执行程序时一样运行这个程序。评论中有人反对这种方法,原因是 crontab 的特点之一就是不登陆而运行程序,这个方法和宗旨不符。后来我发现 RVM 自己也提供了给 crontab 调用的 wrapper,但我测试后不成功。于是还是使用了运行 bash 的方法。
目前这个程序基本上完备了。或许有工夫有心情的时候我会写个 css 美化一下页面,毕竟我看 Rails 里也用上了 SCSS,我想学一下。然后看看能不能提取出一个模版,把模版写在主程序里面挺难看的,也不符合风格。