您的位置:首页 > 编程语言 > Ruby

ubuntu下利用crontab自动运行ruby脚本

2013-01-08 20:35 330 查看

需求:

每隔一分钟运行一次指定的ruby脚本

实现:

这里我们提供一份儿实验用代码 如果能调通 则我们就可以运行任何脚本了

实验代码如下:

新建test.sh文件

#!/usr/bin/env bash
source /home/duan/.rvm/environments/ruby-1.8.7-p371
cd /home/duan/aptanapro/remote
rails runner "Order.first"


第一行是必须有的 因为crontab的运行环境与shell或ruby的运行环境不同 导致就算是你单独运行文件成功了换到crontab环境下还是不工作的情况。

第二行指定ruby环境 这边是rvm路径 其实rvm官网上也给出了如何配合rvm使用crontab,有兴趣的可以看这里

第三行指定了我的rails地址,有一个名字为remote的rails项目 路径是/home/duan/aptanapro/

第四行运行rails runner命令 相当与在rails项目中运行命令了 命令内容为调用Order表的第一行

新建getcron文件

接着 咱们在与test.rb的同一文件夹下新建一个getcron文件,里面写上这样一句

* * * * *  /home/duan/test.sh > /home/duan/result.txt 2>&1
含义大家应该都清楚 每分钟执行一次test.sh文件 把结果输出到result.txt中 不要发邮件

权限

root用户和非root用户都可以执行crontab,不过有些命令是需要权限的 如开关机命令等,咱们这个例子中用普通用户即可运行
请用 chmod 777 test.sh 和 chmod 777 getcron 来把两个文件权限放开 (也许不用 但是还是放开好了 万无一失)

执行

现在 咱们来执行getcron文件 让其去执行test.sh文件
cd到test.sh文件目录下 运行
crontab getcron
好了 咱们来查看一下下
用crontab -l 来查看有没有 如果有了 可以用crontab -r 来删除这个定时

另一个测试

如果你嫌上面的太麻烦 只是想小小的测试一把 请自己建一个文件 如tryit

在这个文件内写入

* * * * * export DISPLAY=:0 && /usr/bin/bluefish

bluefish是一个html编辑软件 它的默认的程序执行路径是 /usr/bin/bluefish 执行gui的程序需要加上 export DISPLAY=:0 才能显示gui的界面 每分钟执行这个文件

在此文件目录下执行

crontab tryit

这样一个小测试又完成了~

注意

很有意思的是 ubuntu系统 如果你写了 crontab命令来指定文件运行,它会在指定时间内重复两次!

原因是一个是你本身用户的crontab,另一次运行的是在root权限下的crontab,如果开启和关闭,仅仅关闭自己权限的可不行 记得要加sudo啊。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: