linux定时启动服务与crontab的启动问题
编写shell脚本
新建run.sh文件
#!/bin/bash
. /etc/profile
. ~/.bash_profile //设置环境变量
proc_name="webSpider.jar" # 进程名
file_name="bindmonitortest.log" # 日志文件
pid=0
proc_num() # 计算进程数
{
num=`ps -ef | grep $proc_name | grep -v grep | wc -l`
return $num
}
proc_id() # 进程号
{
pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`
}
proc_num
number=$?
if [ $number -eq 0 ] # 判断进程是否存在
then
nohup java -jar webSpider.jar >webSpider.log 2>&1 &
# 重启进程的命令,请相应修改
proc_id # 获取新进程号
echo ${pid}, `date` >> $file_name # 将新进程号和重启时间记录
fi
配置crontab文件
输入命令: crontab -e
进行编辑
*/1 * * * * cd /home/webSpider && ./run.sh 每隔1分钟启动run.sh脚本
注意
1:在编写完crontab文件的时候,改配置服务不会启动,导致该问题的原因有,run.sh脚本没有配置环境变量。
2:run.sh的脚本权限不够,可使用chmod +777 run.sh来设置权限。
这里我直接粘过滤别人的解决方式:
在脚本最前面加上一句: source ~/.bash_profile 这样运行环境就一摸一样了。加上这句后,直接执行能成功的脚本放在crontab里都能执行。 所有的crontab问题只有两种可能, 1,环境 2,路径 而第二种问题往往又是第一种问题引起的,所以加上.bash_profile里的环境后99%的问题都一招通杀。 .bash_profile会读取.bashrc .bashrc 会读取 /etc/bashrc /etc/bashrc 会读取 /etc/profile 一个linux所有的系统用户,所有的环境变量,都逃不出以上几个文件。(前提是你用bash)。