Shell 脚本与window/dos 下的批处理相似,也就是用各类命令预先放入一个文件中,方便一次性执行的的一个程序文件,主要是方便管理员进行设置或者管理用。

一、shell脚本

在Linux下,我们执行一个命令,执行结果一般会输出在命令行下。如我们想要将执行命令的结果,输出在文件下的时候我们可以使用输出重定向
“>” 定向输出到目标文件,如果文件不存在则创建文件,如果文件存在则清空其内容。
“>>” 定向输出到目标文件,如果文件不存在则创建文件,如果文件存在则在其内容后进行追加。
例如 ls >> /root/myword/result.txt 将ls命令执行的结果,存放在/root/myword/1.txt文件下面。

当我们需要执行两个命令的时候,可以在两个命令之间加上一个&&字符
例如 ls && ll 这样就能顺序地执行的两个命令了。

但是,在我们执行多个命令的时候,就不再适用了。
所以我们可以用shell脚本来执行多个命令。我们可以创建一个shell脚本,在文件直接写上多个命令,退出保存,直接运行就可以运行在sh文件里面的多个命令了。


二、后台运行shell脚本,并在开机自动启动

想要在后台不挂断式地运行shell脚本,我们可以使用nohup(no hang up,不挂运行)命令。
nohup commend >> dir &
commend - 想要运行的命令
“>>”或“>” - 输出重定向,即将执行的结果重新定向输出到指定文件。
dir - 输出重定向的路径
& - 在后台运行
例如,nohup ./test.sh >> /root/test.txt &
在本目录下面,后台运行test.sh脚本,并将直接结果重新定向输出到 /root/test.txt文件中。

那么,如何让它开机自动启动呢?
我们可以配置一下/etc/rc.d/rc.local文件(自启动服务)来实现它。
输入 vi /etc/rc.d/rc.local 进rc.local文件,
输入想要开机启动的命令就行了,重新启动一下,就可以看到在test.txt有执行的结果的输出了。
例如,输入nohup ./test.sh >> /root/test.txt &

三、定时运行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.javaimport java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.io.PrintWriter;
import java.io.IOException;/**
* Description:
* 获取/root/myword/1.txt文件的输出流,输出当时的时间。
*
* @author Lee
*/
public class Hellow{public static void main(String[] args){try{//获取输出流,并将其包装成PrintWriter类FileOutputStream output = new FileOutputStream("/root/myword/1.txt");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:$PATHjava -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/myword/1.txt 文件当中。

linux下开机自动启动,定时运行shell脚本相关推荐

  1. 如何在linux下创建一个可运行shell脚本?

    linux系统下,经常会用到自启动脚本,那么如何新建一个自启动脚本? 工具/原料 linux系统 方法/步骤 1 新建一个.sh文件,touch test.sh 2 编辑test.sh文件,vi te ...

  2. 利用mac的launchd,开机后定时启动shell脚本

    利用mac的launchd开机后定时启动shell脚本 shell脚本 mac开机启动 概念 配置Mac开机后定时启动 参考文档 利用mac的launchd,开机后定时启动shell脚本 利用mac ...

  3. linux下oracle开机自启动,Linux下开机自动启动Oracle的设置

    让我手动启动数据库,我决定花点时间研究下Oracle随Linux自动重启的设置,具体方法如下: 因为办公室突然停电,服务器重启后,数据库并没有跟着重启,,我才发现原来所有的数据库都没有设置开机自动重启 ...

  4. linux脚本监控某一进程,linux监控某个进程的运行shell脚本

    该脚本实现了对指定进程名的进程进行每隔2的扫描监控,一旦发现进程不存在便重新启动. #!/bin/sh a=10; while [[ @a -gt 5 ]]; do if test $(pgrep - ...

  5. linux下测试网卡是否连通shell脚本

    欢迎移步博主小站:白亮吖雅黑丫の小站 linux下利用shell脚本测试网卡是否连通 话不多说,脚本奉上: #!/bin/bash#遍历27至28网段,查询是否能ping通该网段 for a in { ...

  6. linux下防止ARP攻击的shell脚本

    防止ARP攻击的shell脚本,使用命令route.grep.ifconfig等,需要的朋友可以参考下就不废话了,直接上代码了. #!/bin/bash declare gw=`route -n | ...

  7. linux 定时每天执行php,linux下使用cronjob定时执行php脚本

    在linux中输入命令 crontab -e 然后使用vim的命令编辑打开的文件,输入 0 * * * * /usr/bin/php -f /home/userxxx/update.php 保存,退出 ...

  8. Linux下C程序插入执行shell脚本

    1.system(执行shell命令) 相关函数 fork,execve,waitpid,popen 表头文件 #include<stdlib.h> 定义函数 int system(con ...

  9. linux 权限测试,linux下检测root权限的shell脚本

    个人心血来潮时写的一个脚本,比较粗糙,功能也很简单,大家有兴趣的可以拿去改改. 本脚本之争对系统中UID为0的用户 #!/bin/bash                #大家都知道 echo tes ...

最新文章

  1. css3之transition、transform、animation比较
  2. 你不知道的shell用法和脚本,简单强大
  3. mysql可以关联视图_Mysql 五: 数据库自关联、视图
  4. 信息系统项目管理师:第6章:项目进度管理(2)-章节重点汇总
  5. LeetCode 1717. 删除子字符串的最大得分
  6. [LOJ#6053]简单的函数 题解
  7. C语言程序care用法,词汇精选:care的用法和辨析
  8. pb 查询客户端ip地址_特别篇-SAP 客户端(配置、测试、生产)
  9. Java线程中断的理解(转载)
  10. ASP.Net中调用CSS
  11. Netty工作笔记0058---Netty群聊系统客户端
  12. Linux的tasklet函数详解
  13. Java - Java Mail邮件开发(3)spring +Java Mail + Velocity
  14. paip.FTP服务端及客户端的使用总结
  15. console application
  16. 【Java面试题】常见算法总结
  17. 3分钟快速了解,如何一次通过CISSP考试?
  18. 微信小程序 实现带刻尺度滑块
  19. JavaScript字符统计出现次数
  20. 虚拟机中的ubuntu怎么设置1920X1080分辨率

热门文章

  1. [574]tf.nn.xw_plus_b
  2. Java Scanner的hasNext()方法
  3. Django中如何使用Mysql数据库
  4. 集合框架·List集合简介
  5. 事务的基本特性是什么
  6. MySQL锁表解决方法(转)
  7. ad导出bom表不完整_新手学AD电子设计,分四个步骤学习,不用看视频教程也能上手...
  8. 如何选择Python版本2还是3
  9. 4个基本不等式的公式高中_高中数学基本不等式知识点
  10. 6个usb口服务器无响应,USB插口无反应怎么办?USB接口不能用解决办法