学Linux - 上红联!
Linux系统教程_红联Linux门户
Linux帮助

Java修改Linux系统时间

时间:2017-07-16来源:linux网站 作者:3kqing
有这样一个需求,通过socket请求别人的服务器获取他们的服务器时间,然后需要用这个时间来修改自己服务器的时间。
 
想到的就是使用Java里面的:
Process Runtime.getRuntime.exec(String command);
这命令来执行一个Linux Shell脚本,关于此命令的使用大家可以去网上查查看。
 
然后是修改Linux系统时间的脚本命名为setDate.sh,如下:
#!/bin/bash
# we have less than 2 arguments. Print the help text:
if [ $# == 2 ];then
echo "input date is:" $1 ",time is:" $2
date -s "$1 $2"
fi
 
把此脚本放到服务器上,通过Java去掉用:
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;
public class LinuxTimeSetter {  
public void runLinuxScript() throws IOException {  
//通过exec 来运行Linux shell脚本:在这个demo中 setDate.sh 是和 LinuxTimeSetter 在同一个文件夹中  
String[] command = new String[]{"sudo","./setDate.sh","2010-10-10","12:12:12"};  
Process proc = Runtime.getRuntime().exec(command);  
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));  
String text = null;  
//输出操作结果  
while ((text = br.readLine()) != null) {  
System.out.println(text);  
}  
}  
public static void main(String[] args) {  
String osName = System.getProperty("os.name").toLowerCase();  
System.out.println(osName);  
LinuxTimeSetter runner = new LinuxTimeSetter();  
try {  
runner.runLinuxScript();  
} catch (IOException e) {  
e.printStackTrace();  
}  
}  
}
 
如果你用的是root用户,那么应该是能成功的,但如果不是root用户是不会成功的,因为普通用户账户下,是无法成功设置Linux系统的时间。
因此你需要切换到root账户,使用visudo编辑sudoers配置文件(网上有sudo具体使用方法)
 
例如我们用的普通用户:test/test
用hostname获取当前主机名:linux.localdomain
root ALL=(ALL) ALL 
test linux.localdomain=(ALL) NOPASSWD: /home/test/demo/setDate.sh 
#第一行:允许root用户使用sudo命令变成系统中任何其它类型的用户
#第二行: 格式:用户或组 主机【ALL/本机名】 = (权限【ALL/root】) 命令,就本例来说,它是用户test。此外,因为系统中的组和用户可以重名,要想指定该规则的适用对象是组而非用户的话,组对象的名称一定要用百分号%开头。
 
切换到test用户中:su - etoken,运行sudo ./setDate.sh 2017-07-16 21:01:22,使用date命令检查Linux时间是否成功修改。如果成功,就说明配置成功了。那么Java LinuxTimeSetter,也会成功了。
 
参考:
Java修改Linux系统时间
Java修改Linux系统时间
 
本文永久更新地址:http://www.linuxdiyf.com/linux/32000.html
------分隔线------