<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 17.4 systemctl 針對 timer 的配置文件 有時候,某些服務你想要定期執行,或者是開機后執行,或者是什么服務啟動多久后執行等等的。在過去,我們大概都是使用 crond 這個服務來定期處理, 不過,既然現在有一直常駐在內存當中的 systemd 這個好用的東西,加上這 systemd 有個協力服務,名為 timers.target 的家伙,這家伙可以協助定期處理各種任務! 那么,除了 crond 之外,如何使用 systemd 內置的 time 來處理各種任務呢?這就是本小節的重點啰! * systemd.timer 的優勢 在 archlinux 的官網 wiki 上面有提到,為啥要使用 systemd.timer 呢? * 由于所有的 systemd 的服務產生的信息都會被紀錄 (log),因此比 crond 在 debug 上面要更清楚方便的多; * 各項 timer 的工作可以跟 systemd 的服務相結合; * 各項 timer 的工作可以跟 control group (cgroup,用來取代 /etc/secure/limit.conf 的功能) 結合,來限制該工作的資源利用 雖然還是有些弱點啦~例如 systemd 的 timer 并沒有 email 通知的功能 (除非自己寫一個),也沒有類似 anacron 的一段時間內的隨機取樣功能 (random_delay), 不過,總體來說,還是挺不錯的!此外,相對于 crond 最小的單位到分, systemd 是可以到秒甚至是毫秒的單位哩!相當有趣! * 任務需求 基本上,想要使用 systemd 的 timer 功能,你必須要有幾個要件: * 系統的 timer.target 一定要啟動 * 要有個 sname.service 的服務存在 (sname 是你自己指定的名稱) * 要有個 sname.timer 的時間啟動服務存在 滿足上面的需求就 OK 了!有沒有什么案例可以來實作看看?這樣說好了,我們上個小節不是才自己做了個 backup.service 的服務嗎?那么能不能將這個 backup.service 用在定期執行上面呢?好啊!那就來測試看看! * sname.timer 的設置值 你可以到 /etc/systemd/system 下面去創建這個 *.timer 檔,那這個文件的內容要項有哪些東西呢?基本設置主要有下面這些: (man systemd.timer & man systemd.time) | [Timer] 部份 | | --- | --- | | 設置參數 | 參數意義說明 | | OnActiveSec | 當 timers.target 啟動多久之后才執行這只 unit | | OnBootSec | 當開機完成后多久之后才執行 | | OnStartupSec | 當 systemd 第一次啟動之后過多久才執行 | | OnUnitActiveSec | 這個 timer 配置文件所管理的那個 unit 服務在最后一次啟動后,隔多久后再執行一次的意思 | | OnUnitInactiveSec | 這個 timer 配置文件所管理的那個 unit 服務在最后一次停止后,隔多久再執行一次的意思。 | | OnCalendar | 使用實際時間 (非循環時間) 的方式來啟動服務的意思!至于時間的格式后續再來談。 | | Unit | 一般來說不太需要設置,因此如同上面剛剛提到的,基本上我們設置都是 sname.server + sname.timer,那如果你的 sname 并不相同時,那在 .timer 的文件中, 就得要指定是哪一個 service unit 啰! | | Persistent | 當使用 OnCalendar 的設置時,指定該功能要不要持續進行的意思。通常是設置為 yes ,比較能夠滿足類似 anacron 的功能喔! | 基本的項目僅有這些而已,在設置上其實并不困難啦! * 使用于 OnCalendar 的時間 如果你想要從 crontab 轉成這個 timer 功能的話,那么對于時間設置的格式就得要了解了解~基本上的格式如下所示: ``` 語法:英文周名 YYYY-MM-DD HH:MM:SS 范例:Thu 2015-08-13 13:40:00 ``` 上面談的是基本的語法,你也可以直接使用間隔時間來處理!常用的間隔時間單位有: * us 或 usec:微秒 (10-6 秒) * ms 或 msec:毫秒 (10-3 秒) * s, sec, second, seconds * m, min, minute, minutes * h, hr, hour, hours * d, day, days * w, week, weeks * month, months * y, year, years 常見的使用范例有: ``` 隔 3 小時: 3h 或 3hr 或 3hours 隔 300 分鐘過 10 秒: 10s 300m 隔 5 天又 100 分鐘: 100m 5day # 通常英文的寫法,小單位寫前面,大單位寫后面~所以先秒、再分、再小時、再天數等~ ``` 此外,你也可以使用英文常用的口語化日期代表,例如 today, tomorrow 等!假設今天是 2015-08-13 13:50:00 的話,那么: | 英文口語 | 實際的時間格式代表 | | --- | --- | | now | Thu 2015-08-13 13:50:00 | | today | Thu 2015-08-13 00:00:00 | | tomorrow | Thu 2015-08-14 00:00:00 | | hourly | *-*-* *:00:00 | | daily | *-*-* 00:00:00 | | weekly | Mon *-*-* 00:00:00 | | monthly | *-*-01 00:00:00 | | +3h10m | Thu 2015-08-13 17:00:00 | | 2015-08-16 | Sun 2015-08-16 00:00:00 | * 一個循環時間運行的案例 現在假設這樣: * 開機后 2 小時開始執行一次這個 backup.service * 自從第一次執行后,未來我每兩天要執行一次 backup.service 好了,那么應該如何處理這個腳本呢?可以這樣做喔! ``` [root@study ~]# vim /etc/systemd/system/backup.timer [Unit] Description=backup my server timer [Timer] OnBootSec=2hrs OnUnitActiveSec=2days [Install] WantedBy=multi-user.target # 只要這樣設置就夠了!儲存離開吧! [root@study ~]# systemctl daemon-reload [root@study ~]# systemctl enable backup.timer [root@study ~]# systemctl restart backup.timer [root@study ~]# systemctl list-unit-files &#124; grep backup backup.service disabled # 這個不需要啟動!只要 enable backup.timer 即可! backup.timer enabled [root@study ~]# systemctl show timers.target ConditionTimestamp=Thu 2015-08-13 14:31:11 CST # timer 這個 unit 啟動的時間! [root@study ~]# systemctl show backup.service ExecMainExitTimestamp=Thu 2015-08-13 14:50:19 CST # backup.service 上次執行的時間 [root@study ~]# systemctl show backup.timer NextElapseUSecMonotonic=2d 19min 11.540653s # 下一次執行距離 timers.target 的時間 ``` 如上表所示,我上次執行 backup.service 的時間是在 2015-08-13 14:50 ,由于設置兩個小時執行一次,因此下次應該是 2015-08-15 14:50 執行才對! 由于 timer 是由 timers.target 這個 unit 所管理的,而這個 timers.target 的啟動時間是在 2015-08-13 14:31 , 要注意,最終 backup.timer 所紀錄的下次執行時間,其實是與 timers.target 所紀錄的時間差!因此是“ 2015-08-15 14:50 - 2015-08-13 14:31 ”才對! 所以時間差就是 2d 19min 啰! * 一個固定日期運行的案例 上面的案例是固定周期運行一次,那如果我希望不管上面如何運行了,我都希望星期天凌晨 2 點運行這個備份程序一遍呢?請注意,因為已經存在 backup.timer 了! 所以,這里我用 backup2.timer 來做區隔喔! ``` [root@study ~]# vim /etc/systemd/system/backup2.timer [Unit] Description=backup my server timer2 [Timer] OnCalendar=Sun *-*-* 02:00:00 Persistent=true Unit=backup.service [Install] WantedBy=multi-user.target [root@study ~]# systemctl daemon-reload [root@study ~]# systemctl enable backup2.timer [root@study ~]# systemctl start backup2.timer [root@study ~]# systemctl show backup2.timer NextElapseUSecRealtime=45y 7month 1w 6d 10h 30min ``` 與循環時間運行差異比較大的地方,在于這個 OnCalendar 的方法對照的時間并不是 times.target 的啟動時間,而是 Unix 標準時間! 亦即是 1970-01-01 00:00:00 去比較的!因此,當你看到最后出現的 NextElapseUSecRealtime 時,哇!下一次執行還要 45 年 + 7 個月 + 1 周 + 6 天 + 10 小時過 30 分~剛看到的時候,鳥哥確實因此揉了揉眼睛~確定沒有看錯...這才了解原來比對的是“日歷時間”而不是某個 unit 的啟動時間啊!呵呵! 通過這樣的方式,你就可以使用 systemd 的 timer 來制作屬于你的時程規劃服務啰!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看