Java程序定时执行shell脚本
第一次写博客,写的不好还请见谅。
之前在Linux环境中想定期执行某个脚本,第一反应就是将这个task加入到crontab里(crontab的知识点这里就不具体介绍了),当然,这种做法一般情况下是可行的。但是,当你发现,你没有编辑crontab权限,或者你所用的用户不在可执行crontab里面任务的列表时,怎么办呢?
我的解决方法是后台跑Java程序,利用Java程序定时执行shell脚本。
如何在Java代码中定时执行shell脚本?引用下面这位朋友在Quora的回答。
Terrence Cox, Trainer at Linux Academy (http://linuxacademy.com)
There are two methods that work generally well depending on what kind of flexibility you need within your code and for the script you need to call. Here are examples:
- String[] cmdScript = new String[]{"/bin/bash", "path/to/myScript.sh"};
- Process procScript = Runtime.getRuntime().exec(cmdScript);
If you only need to call your script without any other parameters, that is the most direct method. Although you can add parameters directly after that name of the script if needed, complex parameters (spaces, special characters, etc) can cause formatting issues and lead to bugs.
If you want to be able to debug easier and keep your parameters separate, you can use the ProcessBuilder class, something like:
- Process procBuildScript = new ProcessBuilder("path/to/myScript.sh", "myArg1 myArg2").start();
我用的是第一种方法Runtime,下面贴上我的代码,很简单。
TimeTask.java:
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;public class TimeTask {Timer timer;public Date getTime() {Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 1); //设置“时”为1,HOUR_OF_DAY代表24小时制
calendar.set(Calendar.MINUTE, 10); //设置“分”为10calendar.set(Calendar.SECOND, 00); //设置“秒”为0Date time = calendar.getTime(); return time;}public TimeTask(){ Date time = getTime(); System.out.println("The schedule time is:" + time); timer = new Timer(); timer.schedule(new TimeTaskThread(), time); //创建定时执行的任务} public static void main(String[] args) { new TimeTask(); } }
TimeTaskThread:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.TimerTask;public class TimeTaskThread extends TimerTask {@Overridepublic void run() {// TODO Auto-generated method stubString[] cmdScript = new String[]{"/bin/bash", "/data/enovia_dev/sanitytest/EAICheck/EAICheck.sh"}; //脚本位置及类型try {Process procScript = Runtime.getRuntime().exec(cmdScript); //执行脚本} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("Error...");}System.out.println("TimeTaskThread end!");} }
Java程序定时执行shell脚本相关推荐
- Linux 定时执行shell 脚本
2019年第 85 篇文章,总第 109 篇文章 本文大约2000字,阅读大约需要6分钟 crontab 可以在指定的时间执行一个shell脚本以及执行一系列 Linux 命令. 定时执行shell ...
- Android启动过程中执行一个C语言的应用程序或者执行shell脚本
Android启动过程中执行一个C语言的应用程序或者执行shell脚本 一.Android启动过程中去对系统做一些设置,如修改某些文件夹的属性和文件的权限,可在init.rc中增加service执行s ...
- linux定时执行shell脚本
linux定时执行shell脚本 需求:每分钟检查下文件是否存在 解决思路: 1.编写shell脚本,检查文件是否存在,存在在文件中记录yes,不存在记录no 2.将脚本加入linux定时任务cron ...
- Windows 任务计划程序定时执行 powershell 脚本
由于需要进行一些特殊操作,打算使用 powershell 来写脚本,需要Windows 任务计划程序定时执行. 怎么在Windows 任务计划程序中执行powershell脚本?? 做一个简单测试:本 ...
- linux脚本定时执行,Shell脚本实现每个工作日定时执行指定程序
我们可能会遇到这样的情景:必须在每个工作日定时执行 原理很简单,Shell脚本内部每隔1秒查询一次当前时间.日期以及星期数,当检测到当前星期数week非0或6(0代表星期天,6代表星期六)且时间cur ...
- linux启动java jar文件_推荐:Linux启动Java程序jar包Shell脚本
#!/bin/sh# 该脚本为Linux下启动java程序的脚本## author: luandy# date: 2021/1/15## 特别注意:# 该脚本使用系统kill命令来强制终止指定的jav ...
- java -jar 停止_推荐:Linux启动Java程序jar包Shell脚本
每次启动Java程序jar包的时候,难道你还在手敲java -jar xxserver.jar--?边敲边想着都需要追加哪些参数? 今天就推荐给大家一个几乎通用的Shell脚本,它支持Java程序Ja ...
- linux 定时执行shell脚本 定时任务
1 #!/bin/bash 2 step=1 3 for ((i=1;i<=60; i+=step)) 4 do 5 $(`/usr/local/php-5.6.22/bin/php /root ...
- Linux下定时执行shell脚本
1.定义shell脚本 vi test.sh 录入要执行的命令 source /etc/profile source ~/.cshrcdate >> /opt/data.txt 保存退出, ...
最新文章
- 看动画轻松理解「链表」实现「LRU缓存淘汰算法」
- 人类评估已不是NLG的最佳标准,华盛顿大学提出全新观点,网友:那是评估人水平不行...
- 锚杆拉拔试验弹性模量计算_土钉、锚杆拉拔试验检测方案 - 图文 -
- 从搜索引擎到社交网络的艰难转变
- [置顶] Mybatis技术(二) MyBatis-Spring
- linux修改ssh登陆端口号,Linux 6 修改ssh默认远程端口号的操作步骤
- 化工原理 (传热和设备)
- 使用OData API批量删除Marketing Cloud里的contact
- python处理字典的方法_python字典的常用操作方法小结
- k8s挂载目录_K8S中挂载目录引发的血案!
- foxit phantom pdf 7.3_Jpeg to Pdf Converter 3000批量将图片转为PDF的方法
- 微信小程序 - 基本学习资源
- (1)JavaScript入门
- mysql 视图view
- 8,888+ 字,彻底征服 Spring AOP!
- 谷歌Chrome浏览器保存网页为PDF
- matlab电路图powergui怎么用,使用matlab中的powergui对采集的数据进行谐波分析#实验日记#...
- Reservior Sampling(蓄水池采样) in Data Streams
- 孙溟㠭书画艺术《退步向前》
- Keras深度学习实战(39)——音乐音频分类