执行crontab加载ruby的rvm路径问题,已解决
近期爬虫框架慢慢优化,就想转进定时任务执行,不然自己天天在那边敲运行程序的命令也是很麻烦,但是我的ruby使用rvm安装的,所以跑脚本的时候,还要带上rvm的路径,path,gem_home,gem_path,就可以运行了,写个随笔总结一下,步骤如下。
先大概说一下,首先,我的ruby程序都已经写好了,然后我把执行ruby程序的命令放进一个shell脚本里,到时候我们执行这个shell脚本就可以啦。
举个例子:
第一步:执行ruby程序 要带上ruby的全路径 在终端敲入which ruby即可;执行对应的文件,也是要带上文件的全路径的,进入文件的所在位置,敲入pwd即可。(如果有多个程序,可以继续追加,我这边先写一条)
/usr/local/rvm/rubies/ruby-2.2.0/bin/ruby /samba/xww/me/new/evesaddiction/get_good.rb
第二步:写一个bash的脚本,把执行ruby的这行命令放进这个脚本,我给他取名叫1.sh,就把以上的那行代码复制进去即可
第三步:然后这时候你敲入crontab -e,然后敲入以下命令,你发现并不可以运行,这边的任务时间我先随意。
* * * * * /bin/bash /samba/xww/me/test/1.sh 1>/root/info 2>&1
到这里,原因是rvm装的ruby。所以用crontab时,系统不知道 ruby的位置 ,还有gem包的位置。你那样指定只是告诉crontab ruby的位置 没有告诉它 gem包的位置。
所以,这时候我们敲入一个命令,env,这个命令会出现你当前的系统的环境。然后去这里面找到相关的PATH、GEM_HOME、GEM_PATH,将这三个export到你的1.sh的shell脚本即可,这时候你的crontab程序就可以运行了。
export PATH="you path" export GEM_HOME="you gem_home" export GEM_PATH="you gem_path"
这时候你的程序就可以定时跑啦,大功告成。