最近遇到一种情况,那就是在ssh客户端执行了服务器上的程序后,不小心断电断网了,等再来来电来网时,重新连接 .
执行 ps -ef ,发现原来的程序已经不存在了。伤心啊!跑了两天的数据又要重新跑。我。。我。。
后来牛人们告诉我,可以使用nohup和crontab这两种方式:
第一种方式:
执行命令:
#nohup /usr/show.sh >/dev/null 2>&1 &
明白这句话,就足够我这个开发的使用了。
nohup命令说,固定的
/usr/show.sh是shell脚本的位置,里面当然是shell命令
>/dev/null 2>&1 将标准输出和错误输出重定向到/dev/null中,当然也可以不写,不写会默认到nohup.out文件中
最后面的&千万不要丢啊,这是后台运行的保证
如果重定向了,则出现一个数字,表示shell运行进程号
如果不重定向,则出现appending output to nohup.out表示成功运行了
第二种方式:
使用crontab,使用方式网上一搜一大片,这里我也简单说一句
* * * * * command
*依次代表
0~59 表示分
1~23 表示小时
1~31 表示日
1~12 表示月份
0~6 表示星期(其中0表示星期日)
一种是定时,一种是每隔一定时间执行,都可以设置。
说重点,就是crontab -e之后,输入:
30 * * * * /usr/show.sh >/dev/null 2>&1
这句话的意思是,每小时的第30分钟执行以/usr/下的show.sh脚本,并将输出信息重定向到/dev/null中
如果不重定向,则去/var/spool/mail/u查看信息
注意的事情是使用crontab执行的脚本中的内容,路径要详细,环境变量要明确
贴一段:
#!/bin/bash
. /etc/profile
. ~/.bash_profile
source ~/.bashrc;
cd /usr/spider/WebSpider/bin;
for f in `ls ../lib/`;
do
CLASSPATH=${CLASSPATH}:$f;
done
echo $CLASSPATH
/opt/jdk1.6.0_29/bin/java -classpath $CLASSPATH com.weiboyi.amqp.rabbit.crawl.config.client.App /usr/data/ c 30 1 10000