Java修改Linux系统时间

    有这样一个需求,通过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-15 18:01:22,使用date命令检查Linux时间是否成功修改。如果成功,就说明配置成功了。那么Java LinuxTimeSetter,也会成功了。

 

参考:

http://blog.csdn.net/liu251/article/details/4263266

http://blog.csdn.net/liu251/article/details/4263562

 

此技能大家是否get到呢?

转载于:https://my.oschina.net/dolphinboy/blog/1417312

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值