<提問> 如何使用Shell實現NTP時間伺服器指定同步(懇請兄弟姊妹們幫忙) [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



<提問> 如何使用Shell實現NTP時間伺服器指定同步(懇請兄弟姊妹們幫忙)
會員一級
註冊日期:
2019/1/14 18:21
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 2
MP : 1 / 34
EXP: 10
離線
大家好, 我想用Shell做.Sh檔 , 但對於語法不熟, 特地上來論壇 尋求各位兄弟姐妹的幫忙~

***系統版本:ubuntu 18.04

***需求情境: 用戶透過點.sh檔 , 執行以下這兩行指令, 並且腳本已預先輸入Sudo密碼 , 讓指令在運作時不會跳出要求輸入密碼字樣.
sudo service ntp stop
sudo ntpdate "118.163.81.63"

[url]https://s2.ax1x.com/2019/01/14/FxoB5V.png[/url]

請問以上需求 , 要使用具體何種語法來實現呢 ? 謝謝各位幫忙 ^ ^

附件:



png  U1804.PNG (16.00 KB)
53294_5c3c6bb1c29a8.png 541X144 px

png  U1804.PNG (16.00 KB)
53294_5c3c6bbda2022.png 541X144 px

2019/1/14 19:00
應用擴展 工具箱
回覆: <提問> 如何使用Shell實現NTP時間伺服器指定同步(懇請兄弟姊妹們幫忙)
會員三級
註冊日期:
2009/1/10 10:33
所屬群組:
已註冊使用者
等級: 14
HP : 0 / 340
MP : 81 / 14298
EXP: 60
離線
因為ubuntu 安裝時系統自動加上

timedatectl / timesyncd
取代 ntpdate / ntp 功能,達到系統時間網路同步。

不了解為何 Momo78678 網友還有需要使用 ntpdate 程式?

2019/1/14 21:53
應用擴展 工具箱
回覆: <提問> 如何使用Shell實現NTP時間伺服器指定同步(懇請兄弟姊妹們幫忙)
會員一級
註冊日期:
2019/1/14 18:21
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 2
MP : 1 / 34
EXP: 10
離線
是這樣的 , 由於在"無"網際網路的場景中需要讓客人指定區網(Local LAN)上的NTP伺服器, 並且客人不會使用指令 , 只能讓客人在GUI的環境下實現此功能.

目前ubuntu 18.04版本中的GUI工具只能指定時區與自動同步, 無法指定同步的NTP伺服器為特定區網NTP伺服器.

#!/bin/sh
echo "password" | sudo -S service ntp stop
echo "password" | sudo -S ntpdate "118.163.81.63"

所以我做了一個Script腳本包成.sh執行檔如上 , 但是讓用戶透過點擊.sh檔兩下執行後 , 卻無反應, 系統時間不會進行更新.

交叉測試 ,把腳本中的指令直接放在終端機中執行 卻是馬上生效,系統時間馬上更新.

請問我要如何做? 可以實現 : 讓用戶透過點擊.sh檔兩下執行後 , 系統時間馬上與指定的NTP伺服器進行更新呢? (或是透過安裝GUI工具實現此功能也行)

懇請兄弟姊妹們幫忙 , 謝謝 ^ ^

2019/1/15 13:55
應用擴展 工具箱
回覆: <提問> 如何使用Shell實現NTP時間伺服器指定同步(懇請兄弟姊妹們幫忙)
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 901
MP : 671 / 29259
EXP: 6
離線
第一種方式是直接點「shell script」然後可以直接執行,
要注意的地方是「shell script」執行權限,
然後要取決您的「File Manager」或「Desktop」是否有支援「點選執行shell script」的機制。

================================================================================

第二種方式,則是撰寫「Desktop Entry」,
一樣可以把您要執行指令,寫成「shell script」,然後放到「/usr/local/bin/」這個資料夾,
一樣要注意的地方是「shell script」執行權限。
接著撰寫「Desktop Entry」,然後其中「Exec=」後面要寫剛剛產生的「shell script」。
當然指令也可以直接寫在「Exec=」後面,就不需要剛剛的「shell script」。

================================================================================

關於這個議題相關的討論

* #6 回覆: 如何在桌面製作執行檔
* #1 關於「m3u」和「mpv」和「smplayer」的操作使用

關於「Desktop Entry」的一些討論案例紀錄在「[索引] 泛Ubuntu 安裝調校」。

================================================================================

先給您一個簡單的範例,是關於上面第二種方式的產生步驟。



## 產生「sync-ntp.sh」,並且安裝到「/usr/local/bin/」這個資料夾
cat > sync-ntp.sh << EOF
#!/usr/bin/env bash

mpv http://www.youtube.com/watch?v=Lqe3MuCyh9o

EOF
sudo install -m 755 sync-ntp.sh /usr/local/bin/

## 產生「~/Desktop/sync-ntp.desktop」
cat > ~/Desktop/sync-ntp.desktop << EOF
[Desktop Entry]
Type=Application
Name=同步網路時間
GenericName=Sync-NTP
Exec=sync-ntp.sh
Icon=applications-utilities
Categories=System;Utility;
Keywords=ntp;sync;

EOF

## 設定「~/Desktop/sync-ntp.desktop」擁有者執行權限
chmod u+x ~/Desktop/sync-ntp.desktop

# https://developer.gnome.org/integration-guide/stable/desktop-files.html.en




執行完上面的步驟,就可以在桌面找到一個「圖示」,名稱為「同步網路時間」,
點選它,就會執行「/usr/local/bin/sync-ntp.sh」,
以上只是範例,「sync-ntp.sh」並不是執行您的原本的指令,
所以您可以把您的指令,寫在「/usr/local/bin/sync-ntp.sh」。

而「Desktop Entry」不一定要放在桌面,也可以放在其他位置,上面只是舉例,
請參考「#1 關於「m3u」和「mpv」和「smplayer」的操作使用」。

================================================================================

上面的操作步驟,產生的「/usr/local/bin/sync-ntp.sh」的檔案內容如下


#!/usr/bin/env bash

mpv http://www.youtube.com/watch?v=Lqe3MuCyh9o



================================================================================

上面的操作步驟,產生的「~/Desktop/sync-ntp.desktop」的檔案內容如下


[Desktop Entry]
Type=Application
Name=同步網路時間
GenericName=Sync-NTP
Exec=sync-ntp.sh
Icon=applications-utilities
Categories=System;Utility;
Keywords=ntp;sync;



================================================================================

以上提供參考,報告完畢


2019/1/15 16:07
應用擴展 工具箱
回覆: <提問> 如何使用Shell實現NTP時間伺服器指定同步(懇請兄弟姊妹們幫忙)
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 901
MP : 671 / 29259
EXP: 6
離線
swwei 寫到:
因為ubuntu 安裝時系統自動加上

timedatectl / timesyncd
取代 ntpdate / ntp 功能,達到系統時間網路同步。

不了解為何 Momo78678 網友還有需要使用 ntpdate 程式?


剛剛參考「#2」提到的關鍵字「timedatectl」和「timesyncd」。

做了一些探索,簡易紀錄如下

================================================================================

以下測試環境是「Ubuntu 18.04」

================================================================================

執行


$ apt-file search timedatectl



顯示


fish-common: /usr/share/fish/completions/timedatectl.fish
manpages-zh: /usr/share/man/zh_CN/man1/timedatectl.1.gz
manpages-zh: /usr/share/man/zh_TW/man1/timedatectl.1.gz
opensvc: /var/lib/opensvc/compliance/com.opensvc/timedatectl.py
systemd: /usr/bin/timedatectl
systemd: /usr/share/bash-completion/completions/timedatectl
systemd: /usr/share/man/man1/timedatectl.1.gz
systemd: /usr/share/zsh/vendor-completions/_timedatectl



執行


$ dpkg -L systemd | grep timedatectl



顯示


/usr/bin/timedatectl
/usr/share/bash-completion/completions/timedatectl
/usr/share/man/man1/timedatectl.1.gz
/usr/share/zsh/vendor-completions/_timedatectl



可以找到相關的「Manpage」如下


$ man timedatectl



================================================================================

執行


$ apt-file search timesyncd



顯示


cloud-init: /etc/cloud/templates/timesyncd.conf.tmpl
logcheck-database: /etc/logcheck/ignore.d.server/systemd-timesyncd
manpages-de: /usr/share/man/de/man8/systemd-timesyncd.8.gz
manpages-de: /usr/share/man/de/man8/systemd-timesyncd.service.8.gz
systemd: /etc/dhcp/dhclient-exit-hooks.d/timesyncd
systemd: /etc/systemd/timesyncd.conf
systemd: /lib/systemd/system/systemd-timesyncd.service
systemd: /lib/systemd/systemd-timesyncd
systemd: /usr/share/man/man5/timesyncd.conf.5.gz
systemd: /usr/share/man/man5/timesyncd.conf.d.5.gz
systemd: /usr/share/man/man8/systemd-timesyncd.8.gz
systemd: /usr/share/man/man8/systemd-timesyncd.service.8.gz



執行


$ dpkg -L systemd | grep timesyncd



顯示


/etc/dhcp/dhclient-exit-hooks.d/timesyncd
/etc/systemd/timesyncd.conf
/lib/systemd/system/systemd-timesyncd.service
/lib/systemd/systemd-timesyncd
/usr/share/man/man5/timesyncd.conf.5.gz
/usr/share/man/man8/systemd-timesyncd.service.8.gz
/usr/share/man/man5/timesyncd.conf.d.5.gz
/usr/share/man/man8/systemd-timesyncd.8.gz



可以找到相關的「Manpage」如下


$ man timesyncd.conf
$ man systemd-timesyncd



================================================================================

根據「$ man timesyncd.conf

可以找到一個設定檔「/etc/systemd/timesyncd.conf」

執行下面指令,觀看「/etc/systemd/timesyncd.conf」這個檔案的內容


$ cat /etc/systemd/timesyncd.conf



顯示


#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.

[Time]
#NTP=
#FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048



發現到有兩個參數NTP」和「FallbackNTP」,可以設定要連線同步的「Server」。

================================================================================

可以直接修改「/etc/systemd/timesyncd.conf」這個檔案的內容,來設定。

例如設定「NTP=clock.stdtime.gov.tw」。

不過以下範例,先不修改「/etc/systemd/timesyncd.conf」這個檔案的內容。

================================================================================

執行下面指令,先產生「/etc/systemd/timesyncd.conf.d」這個資料夾。


$ sudo mkdir -p /etc/systemd/timesyncd.conf.d



================================================================================

接著執行下面指令,產生一個檔案「/etc/systemd/timesyncd.conf.d/myntp.conf」


$ sudo sh -c 'echo "[Time]\nNTP=clock.stdtime.gov.tw" > /etc/systemd/timesyncd.conf.d/myntp.conf'



接著執行下面指令,觀看「/etc/systemd/timesyncd.conf.d/myntp.conf」這個檔案的內容


$ cat /etc/systemd/timesyncd.conf.d/myntp.conf



顯示


[Time]
NTP=clock.stdtime.gov.tw




================================================================================

接著執行下面兩個指令,就會執行同步的動作。


timedatectl set-ntp false

timedatectl set-ntp true



================================================================================

可以執行下面指令,來確認「執行同步的動作」,是否有被執行。(參考下面藍色字)


$ systemctl status systemd-timesyncd.service



顯示


● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-01-16 00:44:29 CST; 4s ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 4831 (systemd-timesyn)
   Status: "Synchronized to time server 211.22.103.158:123 (clock.stdtime.gov.tw)."
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/systemd-timesyncd.service
           └─4831 /lib/systemd/systemd-timesyncd

Jan 16 00:44:29 work systemd[1]: Starting Network Time Synchronization...
Jan 16 00:44:29 work systemd[1]: Started Network Time Synchronization.
Jan 16 00:44:29 work systemd-timesyncd[4831]: Synchronized to time server 211.22.103.158:123 (clock.stdtime.gov.tw).




上面可以看到「time server」已經改成「211.22.103.158:123 (clock.stdtime.gov.tw)」。

================================================================================

另外在測試前,也可以先修改系統的時間,然後再來「執行同步的動作」,來觀察是否真的有同步。

執行


timedatectl set-ntp false

timedatectl set-time '00:13:14'



注意:
原本狀態若是「true」,若沒有先執行「timedatectl set-ntp false」,
就會顯示下面的提示訊息


Failed to set time: Automatic time synchronization is enabled



================================================================================

* http://www.stdtime.gov.tw/chinese/bulletin/NTP%20promo.txt
* https://developers.google.com/time/
* https://www.ntppool.org/

閱讀「$ man timesyncd.conf」,
也可以設定多個「Server」,用「空白」隔開,
例如「NTP=time.google.com clock.stdtime.gov.tw」。

舉例,執行


$ sudo sh -c 'echo "[Time]\nNTP=time.google.com clock.stdtime.gov.tw" > /etc/systemd/timesyncd.conf.d/myntp.conf'



================================================================================

回到「#4」提到的範例,就可以改成


## 產生「sync-ntp.sh」,並且安裝到「/usr/local/bin/」這個資料夾
cat > sync-ntp.sh << EOF
#!/usr/bin/env bash

timedatectl set-ntp false

timedatectl set-ntp true

EOF
sudo install -m 755 sync-ntp.sh /usr/local/bin/

## 產生「~/Desktop/sync-ntp.desktop」
cat > ~/Desktop/sync-ntp.desktop << EOF
[Desktop Entry]
Type=Application
Name=同步網路時間
GenericName=Sync-NTP
Exec=sync-ntp.sh
Icon=applications-utilities
Categories=System;Utility;
Keywords=ntp;sync;

EOF

## 設定「~/Desktop/sync-ntp.desktop」擁有者執行權限
chmod u+x ~/Desktop/sync-ntp.desktop

# https://developer.gnome.org/integration-guide/stable/desktop-files.html.en



================================================================================

後記:

後來找資料的時候,又找到之前參與的一篇討論「關於debian 8 時間伺服器設定的問題」。


================================================================================

暫記:

* https://www.freedesktop.org/wiki/Software/systemd/timedated/



$ qdbus --system org.freedesktop.timedate1 /org/freedesktop/timedate1




$ qdbus --system org.freedesktop.timedate1 /org/freedesktop/timedate1 org.freedesktop.timedate1.NTP




$ qdbus --system org.freedesktop.timedate1 /org/freedesktop/timedate1 org.freedesktop.timedate1.SetNTP true true




$ qdbus --system org.freedesktop.timedate1 /org/freedesktop/timedate1 org.freedesktop.timedate1.SetNTP false false




### SourcePackage: systemd

* systemd-237/src/timedate/timedated.c
* systemd-237/src/timedate/timedatectl.c

### SourcePackage: gnome-control-center

* gnome-control-center-3.28.2/panels/datetime/cc-datetime-panel.c


================================================================================

以上提供參考,報告完畢


2019/1/16 1:14
應用擴展 工具箱
回覆: <提問> 如何使用Shell實現NTP時間伺服器指定同步(懇請兄弟姊妹們幫忙)
會員一級
註冊日期:
2019/1/14 18:21
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 2
MP : 1 / 34
EXP: 10
離線
收到~

感謝S大的幫忙 , 趕緊來試試 ^ ^

2019/1/16 15:38
應用擴展 工具箱
回覆: <提問> 如何使用Shell實現NTP時間伺服器指定同步(懇請兄弟姊妹們幫忙)
版主
註冊日期:
2008/7/14 0:03
來自 螢幕的另一端
所屬群組:
網站管理員
已註冊使用者
討論區管理群
等級: 33
HP : 0 / 808
MP : 511 / 35141
EXP: 33
離線
首先你將 sudo 設定成免問密碼的你就會省事多了,google 一下 sudo 的用法就有了。

其次,你可以使用 zenity 這個套件,使你即使用 shell script 也可以有圖型介面
你可以參考我的筆記
http://note.zn2.us/zenity.htm

2019/1/22 11:42
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.