Java修改Linux系统时间

博客围绕通过socket请求获取他人服务器时间,再修改自身服务器时间的需求展开。介绍使用Java的Process Runtime.getRuntime.exec(String command)命令执行Linux Shell脚本,给出修改Linux系统时间的脚本示例,还说明了非root用户需修改sudoers配置文件,最后给出验证配置是否成功的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 摘要:有这样一个需求,通过socket请求别人的服务器获取他们的服务器时间,然后需要用这个时间来修改自己服务器的时间。想到的就是使用Java里面的ProcessRuntime.getRuntime.exec(Stringcommand);这命令来执行一个LinuxShell脚本,关于此命令的使用大家可以去网上查查看。然后是修改Linux系统时间的脚本命名为setDate.sh,如下:#!/bin/bash#wehavelessthan2arguments.Printthehelpt
  • 有这样一个需求,通过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.youkuaiyun.com/liu251/article/details/4263266

     

    http://blog.youkuaiyun.com/liu251/article/details/4263562

    此技能大家是否get到呢?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值