admin管理员组文章数量:1532343
原创 :https://blog.csdn/qq2531246791/article/details/84898221
转载请标明出处 https://blog.csdn/qq2531246791/article/details/84898221
添加了 shell 脚本执行后获取返回值
import java.io.IOException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
/**
* 作者 : LZ
* time : 2017/6/8
*/
public class SynSystemDateUtils {
public static void main(String[] args) {
String date = "2017-11-11";
String time = "11:11:11" ;
updateSysDateTime(date,time);
}
/**
* 修改系统时间
* yyyy-MM-dd HH:mm:ss
* @param DataStr_ 2017-11-11 yyyy-MM-dd
* @param TimeStr_ 11:11:11 HH:mm:ss
*/
public static void updateSysDateTime(String dataStr_,String timeStr_){
try {
String osName = System.getProperty("os.name");
// Window 系统
if (osName.matches("^(?i)Windows.*$")) {
String cmd;
// 格式:yyyy-MM-dd
cmd = " cmd /c date " + dataStr_;
Runtime.getRuntime().exec(cmd);
// 格式 HH:mm:ss
cmd = " cmd /c time " + timeStr_;
String res = runAndResult(cmd);
System.out.println("windows 时间修改" + res);
} else if (osName.matches("^(?i)Linux.*$")) {
// Linux 系统 格式:yyyy-MM-dd HH:mm:ss date -s "2017-11-11 11:11:11"
FileWriter excutefw = new FileWriter("/usr/updateSysTime.sh");
BufferedWriter excutebw=new BufferedWriter(excutefw);
excutebw.write("date -s \"" + dataStr_ +" "+ timeStr_ +"\"\r\n");
excutebw.close();
excutefw.close();
String cmd_date ="sh /usr/updateSysTime.sh";
String res = runAndResult(cmd_date);
System.out.println("cmd :" + cmd_date + " date :" + dataStr_ +" time :" + timeStr_);
System.out.println("linux 时间修改" + res);
} else {
System.out.println("操作系统无法识别");
}
} catch (IOException e) {
e.getMessage();
}
}
/**
* 执行 脚本命令 关心结果
* @param cmd
* @return
*/
public static String runAndResult(String cmd) throws Exception{
StringBuilder sb = new StringBuilder();
BufferedReader br = null;
boolean execFlag = true;
String uuid = UUID.randomUUID().toString().replace("-","");
String tempFileName = "./temp" + uuid +".sh";
try {
String osName = System.getProperty("os.name").toUpperCase(Locale.ENGLISH);
if (osName.matches("^(?i)LINUX.*$") || osName.contains("MAC")) {
FileWriter excutefw = new FileWriter(tempFileName);
BufferedWriter excutebw=new BufferedWriter(excutefw);
excutebw.write(cmd + "\n");
excutebw.close();
excutefw.close();
String command ="bash " + tempFileName;
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
//sb.append("<br/>");
sb.append(System.lineSeparator());
sb.append(line);
}
br.close();
br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while ((line = br.readLine()) != null) {
//sb.append("<br/>");
sb.append(System.lineSeparator());
sb.append(line);
if (line.length() > 0){
execFlag = false;
}
}
br.close();
if (execFlag){
LOGGER.info("exec [ {} ] OK , result : [ {} ]",cmd ,sb.toString());
}else {
throw new RuntimeException(sb.toString());
}
}else {
throw new RuntimeException("不支持的操作系统类型");
}
} catch (Exception e) {
LOGGER.error("exec [ {} ] fail : {}",cmd ,e.getMessage());
throw e;
}finally {
if (br != null){
br.close();
}
FileUtils.deleteQuietly(new File(tempFileName));
}
return sb.toString();
}
}
linux系统需设置:
root用户执行chmod 4755 /bin/date
备注:也就是给date命令增加s权限位即设置setuid(4000),这样普通用户就可以执行date命令了,缺点也是很明显的,相当于去掉了date命令的root权限限制。
版权声明:本文标题:JAVA 修改winlinux 系统时间,JAVA 修改系统时间 ,JAVA调用shell 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1725035564a1003420.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论