linux下开机⾃动启动,定时运⾏shell脚本
Shell 脚本与window/dos 下的批处理相似,也就是⽤各类命令预先放⼊⼀个⽂件中,⽅便⼀次性执⾏的的⼀个程序⽂件,主要是⽅便管理员进⾏设置或者管理⽤。
⼀、shell脚本
在Linux下,我们执⾏⼀个命令,执⾏结果⼀般会输出在命令⾏下。如我们想要将执⾏命令的结果,输出在⽂件下的时候我们可以使⽤输出重定向
“>” 定向输出到⽬标⽂件,如果⽂件不存在则创建⽂件,如果⽂件存在则清空其内容。
“>>” 定向输出到⽬标⽂件,如果⽂件不存在则创建⽂件,如果⽂件存在则在其内容后进⾏追加。
例如 ls >> /root/ 将ls命令执⾏的结果,存放在/root/⽂件下⾯。
当我们需要执⾏两个命令的时候,可以在两个命令之间加上⼀个&&字符
例如 ls && ll 这样就能顺序地执⾏的两个命令了。
但是,在我们执⾏多个命令的时候,就不再适⽤了。
所以我们可以⽤shell脚本来执⾏多个命令。我们可以创建⼀个shell脚本,在⽂件直接写上多个命令,退出保存,直接运⾏就可以运⾏在sh⽂件⾥⾯的多个命令了。
⼆、后台运⾏shell脚本,并在开机⾃动启动
想要在后台不挂断式地运⾏shell脚本,我们可以使⽤nohup(no hang up,不挂运⾏)命令。
nohup commend >> dir &
commend - 想要运⾏的命令
“>>”或“>” - 输出重定向,即将执⾏的结果重新定向输出到指定⽂件。
dir - 输出重定向的路径
& - 在后台运⾏
例如,nohup ./test.sh >> / &
在本⽬录下⾯,后台运⾏test.sh脚本,并将直接结果重新定向输出到 /⽂件中。
那么,如何让它开机⾃动启动呢?
我们可以配置⼀下/etc/rc.d/rc.local⽂件(⾃启动服务)来实现它。
输⼊ vi /etc/rc.d/rc.local 进rc.local⽂件,
输⼊想要开机启动的命令就⾏了,重新启动⼀下,就可以看到在有执⾏的结果的输出了。
例如,输⼊nohup ./test.sh >> / &
三、定时运⾏shell脚本
定时运⾏⼀个命令,我们可以使⽤crontab命令,crontab命令⽤于设置周期性被执⾏的指令。
crontab -e编辑任务
crontab -l显⽰⽬前所有的任务
crontab -r删除所有的任务
我们可以输⼊ crontab -e 进⼊编辑,输⼊想要周期性运⾏的命令就可以了。
时程表的格式如下:
f1 f2 f3 f4 f5 program
其中 f1 是表⽰分钟,f2 表⽰⼩时,f3 表⽰⼀个⽉份中的第⼏⽇,f4 表⽰⽉份,f5 表⽰⼀个星期中的第⼏天。program 表⽰要执⾏的程式。
当 f1 为 * 时表⽰每分钟都要执⾏ program,f2 为 * 时表⽰每⼩时都要执⾏程式,其余类推
当 f1 为 a-b 时表⽰从第 a 分钟到第 b 分钟这段时间内要执⾏,f2 为 a-b 时表⽰从第 a 到第 b ⼩时都要执⾏,其余类推 当 f1 为 /n 时表⽰每 n 分钟个时间间隔执⾏⼀次,f2 为 /n 表⽰每 n ⼩时个时间间隔执⾏⼀次,其余类推
当 f1 为 a, b, c,… 时表⽰第 a, b, c,… 分钟要执⾏,f2 为 a, b, c,… 时表⽰第 a, b, c…个⼩时要执⾏,其余类推
例如: */1 * * * /root/test/test.sh 就是每⼀分钟运⾏⼀次/root/test/test.sh命令 (注意空格!)
四、我们现在来写⼀个,开机⾃动启动,在后天运⾏,每分钟执⾏⼀次输出时间的例⼦。
(⼀)先编写⼀个java程序,来获取当时的时间,并且输出在指定⽂件中。
[root@VM_15_248_centos myword]# vi Hellow.java
import java.io.FileOutputStream;
SimpleDateFormat;
import java.util.Date;
import java.io.PrintWriter;
import java.io.IOException;
/**
* Description:
* 获取/root/⽂件的输出流,输出当时的时间。
*
* @author Lee
*/
public class Hellow{
public static void main(String[] args){
linux循环执行命令脚本try{
//获取输出流,并将其包装成PrintWriter类
FileOutputStream output = new FileOutputStream("/root/");
PrintWriter print = new PrintWriter(output);
//获取当时的时间
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = s.format(new Date());
//输出
print.println(date);
print.flush();
}catch(IOException e){
e.printStackTrace();
}
}
}
编译运⾏它,查看是否成功运⾏,运⾏成功。
(⼆)编写⼀个shell脚本来运⾏它
由于,⽤到⼀些类,所以我们要导⼊java的环境变量,来运⾏它。(关于java环境变量的配置可以查看我另外⼀篇博客)
JAVA_HOME=/data/home/server/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=$CLASSPATH:.:${JAVA_HOME}/lib:${JAVA_HOME}/jre/lib
export PATH=${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin:$PATH
java -cp /root/myword Hellow
运⾏⼀下脚本,查看是否成功,可以看到成功输出了。
这⾥,也有可能运⾏不了shell脚本,我们输⼊ chmod u+x f.sh 来修改权限。
(三)配置/etc/rc.d/rc.local⽂件(⾃启动服务),及crontab命令
输⼊vi /etc/rc.d/rc.local
在配置⽂件中输⼊ nohup /root/myword/f.sh &
保存,退出。
输⼊ crontab -e
在配置⽂件中输⼊ */1 * * * * /root/myword/f.sh
保存,退出之后,就可以看到。
我们就可以看到每分钟,shell脚本在后台执⾏java程序,输出当时的时间在 /root/ ⽂件当中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论