Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
人彈框網(wǎng)頁源碼
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE>嘻嘻 對(duì)不起咯</TITLE><META http-equiv=Content-Type content="text/html; charset=gb2312"><META content="MSHTML 6.00.2800.1106" name=GENERATOR><META content=FrontPage.Editor.Document name=ProgId><SCRIPT language=JavaScript>var msg = "呵呵";var speed = 300; var msgud = " " + msg; function titleScroll() { if (msgud.length <msg.length) msgud += " - " + msg; msgud = msgud.substring(1, msgud.length); document.title = msgud.substring(0, msg.length);window.setTimeout("titleScroll()", speed); } </SCRIPT></HEAD><BODY><script language=JavaScript>alert("咦。怎么回事?")</script><script language=JavaScript>alert("嘿 老兄 你進(jìn)來容易 出去難")</script><script language=JavaScript>alert("放我出去")</script><script language=JavaScript>alert("沒法啦!你都上了,只有陪我了")</script><script language=JavaScript>alert("哈哈!呵呵!嘻嘻!")</script><script language=JavaScript>alert("我都不想的,都是想開心下")</script><script language=JavaScript>alert("別難過了~~~")</script><script language=JavaScript>alert("就和我玩玩啦!")</script><script language=JavaScript>alert("但是玩笑可能開過頭了")</script><script language=JavaScript>alert("竟然要您來陪我")</script><script language=JavaScript>alert("哎,真是的!")</script><script language=JavaScript>alert("答應(yīng)我你會(huì)復(fù)制地址發(fā)給你QQ上的10個(gè)好友就會(huì)自動(dòng)結(jié)束")</script><script language=JavaScript>alert("可是你怎么能回去呢?")</script><script language=JavaScript>alert("我也沒辦法")</script><script language=JavaScript>alert("要不。。。")</script><script language=JavaScript>alert("把機(jī)子關(guān)了吧!")</script><script language=JavaScript>alert("什么?你不愿意關(guān)?")</script><script language=JavaScript>alert("那怎么辦呢?")</script><script language=JavaScript>alert("讓我再想想")</script><script language=JavaScript>alert("對(duì)不起,實(shí)在沒有辦法了!")</script><script language=JavaScript>alert("都是我不好,讓你受那么大委屈!")</script><script language=JavaScript>alert("但是現(xiàn)在你該怎么辦呢?")</script><script language=JavaScript>alert("哎呀!求你了!!別哭好不好?!")</script><script language=JavaScript>alert("都是我的錯(cuò),行了嗎?")</script><script language=JavaScript>alert("什么?不行?孬人,快放了我")</script><script language=JavaScript>alert("別這樣嘛!")</script><script language=JavaScript>alert("我給你講個(gè)故事行嗎?")</script><script language=JavaScript>alert("從前有個(gè)山")</script><script language=JavaScript>alert("山上有個(gè)廟")</script><script language=JavaScript>alert("廟里有個(gè)老和尚有個(gè)小和尚")</script><script language=JavaScript>alert("老和尚正在給小和尚講故事")</script><script language=JavaScript>alert("從前有個(gè)山")</script><script language=JavaScript>alert("山上有個(gè)廟。。。。")</script><script language=JavaScript>alert("別罵我呀?")</script><script language=JavaScript>alert("你不愿聽這個(gè)我給你換一個(gè)")</script><script language=JavaScript>alert("從前有個(gè)山")</script><script language=JavaScript>alert("山上有個(gè)庵")</script><script language=JavaScript>alert("庵里有個(gè)老尼姑有個(gè)小尼姑")</script><script language=JavaScript>alert("老尼姑。。。哎呦別打了,我換一個(gè)!")</script><script language=JavaScript>alert("講個(gè)好聽的")</script><script language=JavaScript>alert("仔細(xì)聽啊")</script><script language=JavaScript>alert("從前有個(gè)山")</script><script language=JavaScript>alert("呵呵,先別打,和那個(gè)不一樣!")</script><script language=JavaScript>alert("山上有個(gè)廟")</script><script language=JavaScript>alert("哎呦,聽我講完!")</script><script language=JavaScript>alert("廟里有個(gè)缸")</script><script language=JavaScript>alert("不一樣了吧")</script><script language=JavaScript>alert("缸里有個(gè)瓢")</script><script language=JavaScript>alert("瓢里有個(gè)碗")</script><script language=JavaScript>alert("碗里有個(gè)勺")</script><script language=JavaScript>alert("勺里有塊肉")</script><script language=JavaScript>alert("我吃了你饞了")</script><script language=JavaScript>alert("我的故事講完了!")</script><script language=JavaScript>alert("好不好?")</script><script language=JavaScript>alert("什么?還想聽?你正孬人!")</script><script language=JavaScript>alert("那好,我再來一個(gè)!")</script><script language=JavaScript>alert("從前")</script><script language=JavaScript>alert("有一個(gè)小孩牽個(gè)羊")</script><script language=JavaScript>alert("我的故事就這么長(zhǎng)")</script><script language=JavaScript>alert("你不愿意聽是嗎?")</script><script language=JavaScript>alert("那怎么辦?")</script><script language=JavaScript>alert("你已經(jīng)出不去了")</script><script language=JavaScript>alert("還是關(guān)掉電腦來的干脆")</script><script language=JavaScript>alert("試試吧")</script><script language=JavaScript>alert("還是不愿關(guān)?")</script><script language=JavaScript>alert("那我再給你講故事!")</script><script language=JavaScript>alert("哎哎,別哭嘛!")</script><script language=JavaScript>alert("哭的我挺傷心的")</script><script language=JavaScript>alert("你真的出不去了")</script><script language=JavaScript>alert("你還不泄氣?")</script><script language=JavaScript>alert("我佩服你這種精神!")</script><script language=JavaScript>alert("你堅(jiān)持這么久一定很急了")</script><script language=JavaScript>alert("你還真能堅(jiān)持!")</script><script language=JavaScript>alert("你一定知道“堅(jiān)持就是勝利”")</script><script language=JavaScript>alert("對(duì)不對(duì)?")</script><script language=JavaScript>alert("如果你有這種精神的話---")</script><script language=JavaScript>alert("你一定會(huì)成功的!")</script><script language=JavaScript>alert("相信我")</script><script language=JavaScript>alert("你快看到希望了")</script><script language=JavaScript>alert("我不騙你")</script><script language=JavaScript>alert("真的!")</script><script language=JavaScript>alert("你馬上就會(huì)找到出口的")</script><script language=JavaScript>alert("多虧你堅(jiān)持了下來")</script><script language=JavaScript>alert("要不,關(guān)了機(jī)子多不好!")</script><script language=JavaScript>alert("是不是?")</script><script language=JavaScript>alert("對(duì)不對(duì)?")</script><script language=JavaScript>alert("喂!給你說點(diǎn)正事!")</script><script language=JavaScript>alert("一個(gè)人受騙是不是很難受?")</script><script language=JavaScript>alert("想不想讓別人替你分擔(dān)一下?")</script><script language=JavaScript>alert("我的意思是----")</script><script language=JavaScript>alert("把你的朋友叫過來!")</script><script language=JavaScript>alert("讓他也受騙")</script><script language=JavaScript>alert("你就在一旁哈哈大笑~~~")</script><script language=JavaScript>alert("好不好?")</script><script language=JavaScript>alert("什么?出賣朋友的事你不干?")</script><script language=JavaScript>alert("你真是好人!")</script><script language=JavaScript>alert("我太感動(dòng)了!")</script><script language=JavaScript>alert("嗚嗚~~~~~~")</script><script language=JavaScript>alert("也好,我從不難為好人!")</script><script language=JavaScript>alert("我決定----")</script><script language=JavaScript>alert("讓好人多在我身邊一會(huì)!")</script><script language=JavaScript>alert("你愿不愿意?")</script><script language=JavaScript>alert("怎么還不愿意?")</script><script language=JavaScript>alert("那好,我馬上讓你出去!")</script><script language=JavaScript>alert("別著急!")</script><script language=JavaScript>alert("你只需再點(diǎn)100000下就可以了!")</script><script language=JavaScript>alert("開個(gè)玩笑")</script><script language=JavaScript>alert("不要生氣")</script><script language=JavaScript>alert("人生就像一場(chǎng)戲")</script><script language=JavaScript>alert("因?yàn)橛芯壊畔嗑?)</script><script language=JavaScript>alert("相扶到老不容易")</script><script language=JavaScript>alert("是否更該去珍惜")</script><script language=JavaScript>alert("他人生氣我不氣")</script><script language=JavaScript>alert("氣出病來無人替")</script><script language=JavaScript>alert("我說的對(duì)不對(duì)?")</script><script language=JavaScript>alert("好了")</script><script language=JavaScript>alert("玩笑也開過了")</script><script language=JavaScript>alert("該說的也說了")</script><script language=JavaScript>alert("該放你出去了!")</script><script language=JavaScript>alert("高興了吧")</script><script language=JavaScript>alert("還有,您可以介紹個(gè)MM給我嗎")</script><script language=JavaScript>alert("什么,還要我介紹一個(gè)給你這個(gè)孬人")</script><script language=JavaScript>alert("呵呵,不用嬲啦!")</script><script language=JavaScript>alert("不嬲就假了,我想現(xiàn)在就撕開你兩邊添啦!")</script><script language=JavaScript>alert("哦,你撕開我兩邊,那你怎樣出呢")</script><script language=JavaScript>alert("你不是真的關(guān)機(jī)是嗎")</script><script language=JavaScript>alert("如果是的,我都沒辦法了,你關(guān)啦")</script><script language=JavaScript>alert("陪多我?guī)仔r(shí)先啦!")</script><script language=JavaScript>alert("我都沒有人陪我")</script><script language=JavaScript>alert("或者你介紹一個(gè)MM給我,就不用你陪啦!好嗎")</script><script language=JavaScript>alert("好,好難啦!")</script><script language=JavaScript>alert("哦,那你就一直陪我啦!")</script><script language=JavaScript>alert("不要,不要,不要,我返出!")</script><script language=JavaScript>alert("哭~~~~~~~~~哭~~~~~~哭~~~~")</script><script language=JavaScript>alert("呵呵,我怕了您 ,你不要哭了,我放你了!")</script><script language=JavaScript>alert("叮咚!開門啦!")</script><script language=JavaScript>alert("祝賀你!你終于出來了!恭喜恭喜!")</script><script language=JavaScript>alert("看到這句話高興了吧?")</script><script language=JavaScript>alert("做任何事可不要高興太早呀!知道了嗎?")</script><script language=JavaScript>alert("聽說過樂極生悲嗎?")</script><script language=JavaScript>alert("算了,算了,還是放你出來吧,做個(gè)深呼吸吧,放松一下!")</script><script language=JavaScript>alert("這次不用擔(dān)心了,放你出來了,通過這個(gè)事,應(yīng)該明白一個(gè)道理呀!")</script><script language=JavaScript>alert("那就是:堅(jiān)持就是勝利,勤奮就有機(jī)遇!")</script></script><script language=JavaScript>alert("祝賀你!你終于出來了!恭喜恭喜!")</script><script language=JavaScript>alert("祝賀你!你終于出來了!恭喜恭喜!")</script><script language=JavaScript>alert("祝賀你!你終于出來了!恭喜恭喜!")</script><script language=JavaScript>alert("祝賀你!你終于出來了!恭喜恭喜!")</script><script language=JavaScript>alert("祝賀你!你終于出來了!恭喜恭喜!")</script><script language=JavaScript>alert("祝賀你!你終于出來了!恭喜恭喜!")</script><script language=JavaScript>alert("祝賀你!你終于出來了!恭喜恭喜!")</BODY></HTML>
秋日生活打卡季#
原文鏈接:統(tǒng)信UOS1060設(shè)置自動(dòng)關(guān)機(jī)01
hello,大家好啊,今天給大家介紹一篇如何在統(tǒng)信UOS 1060上實(shí)現(xiàn)自動(dòng)關(guān)機(jī)的文章,本篇文章采用兩種方式,第一種使用的是crontab定時(shí)任務(wù)的方式,第二種是使用at命令的方式,兩種方式供您選擇。
方法一:使用crontab定時(shí)任務(wù)
1、編輯crontab文件,設(shè)置每天14:09關(guān)機(jī)
uos@uos-PC:~/Desktop$ sudo -i
請(qǐng)輸入密碼:
驗(yàn)證成功
root@uos-PC:~# crontab -e
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
Choose 1-3 [1]: 2
crontab: installing new crontab
root@uos-PC:~#
root@uos-PC:~# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
09 14 * * * /sbin/poweroff
root@uos-PC:~#
2、等到14:09設(shè)備關(guān)機(jī)
方法二:使用at命令來設(shè)置一次性的關(guān)機(jī)任務(wù)
1、安裝at命令
uos@uos-PC:~/Desktop$ sudo apt install at -y
請(qǐng)輸入密碼:
驗(yàn)證成功
正在讀取軟件包列表... 完成
正在分析軟件包的依賴關(guān)系樹
正在讀取狀態(tài)信息... 完成
將會(huì)同時(shí)安裝下列軟件:
exim4-base exim4-config exim4-daemon-light guile-2.2-libs libfl2 libgsasl7 libkyotocabinet16v5
libmailutils5 libntlm0 mailutils mailutils-common
建議安裝:
exim4-doc-html | exim4-doc-info eximon4 spf-tools-perl swaks mailutils-mh mailutils-doc
下列【新】軟件包將被安裝:
at exim4-base exim4-config exim4-daemon-light guile-2.2-libs libfl2 libgsasl7 libkyotocabinet16v5
libmailutils5 libntlm0 mailutils mailutils-common
升級(jí)了 0 個(gè)軟件包,新安裝了 12 個(gè)軟件包,要卸載 0 個(gè)軟件包,有 116 個(gè)軟件包未被升級(jí)。
需要下載 9,660 kB 的歸檔。
解壓縮后會(huì)消耗 56.2 MB 的額外空間。
獲取:1 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 libfl2 arm64 2.6.4-6.2 [103 kB]
獲取:2 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 at arm64 3.1.23-1 [48.0 kB]
獲取:3 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 exim4-config all 4.92.3-8+deb10u7 [325 kB]
獲取:4 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 exim4-base arm64 4.92.3-8+deb10u7 [1,136 kB]
獲取:5 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 exim4-daemon-light arm64 4.92.3-8+deb10u7 [533 kB]
獲取:6 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 guile-2.2-libs arm64 2.2.4+1-2+deb10u1 [4,941 kB]
獲取:7 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 libntlm0 arm64 1.5-1+deb10u1+rebuild [23.6 kB]
獲取:8 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 libgsasl7 arm64 1.8.0-8+b2 [198 kB]
獲取:9 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 libkyotocabinet16v5 arm64 1.2.76-4.2+b1 [267 kB]
獲取:10 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 mailutils-common all 1:3.5-4+rebuild [689 kB]
獲取:11 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 libmailutils5 arm64 1:3.5-4+rebuild [829 kB]
獲取:12 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 mailutils arm64 1:3.5-4+rebuild [567 kB]
已下載 9,660 kB,耗時(shí) 9秒 (1,022 kB/s)
正在預(yù)設(shè)定軟件包 ...
正在選中未選擇的軟件包 libfl2:arm64。
(正在讀取數(shù)據(jù)庫 ... 系統(tǒng)當(dāng)前共安裝有 207780 個(gè)文件和目錄。)
準(zhǔn)備解壓 .../00-libfl2_2.6.4-6.2_arm64.deb ...
正在解壓 libfl2:arm64 (2.6.4-6.2) ...
/var/cache/apt/archives/libfl2_2.6.4-6.2_arm64.deb
正在選中未選擇的軟件包 at。
準(zhǔn)備解壓 .../01-at_3.1.23-1_arm64.deb ...
正在解壓 at (3.1.23-1) ...
/var/cache/apt/archives/at_3.1.23-1_arm64.deb
正在選中未選擇的軟件包 exim4-config。
準(zhǔn)備解壓 .../02-exim4-config_4.92.3-8+deb10u7_all.deb ...
正在解壓 exim4-config (4.92.3-8+deb10u7) ...
/var/cache/apt/archives/exim4-config_4.92.3-8+deb10u7_all.deb
正在選中未選擇的軟件包 exim4-base。
準(zhǔn)備解壓 .../03-exim4-base_4.92.3-8+deb10u7_arm64.deb ...
正在解壓 exim4-base (4.92.3-8+deb10u7) ...
/var/cache/apt/archives/exim4-base_4.92.3-8+deb10u7_arm64.deb
正在選中未選擇的軟件包 exim4-daemon-light。
準(zhǔn)備解壓 .../04-exim4-daemon-light_4.92.3-8+deb10u7_arm64.deb ...
正在解壓 exim4-daemon-light (4.92.3-8+deb10u7) ...
/var/cache/apt/archives/exim4-daemon-light_4.92.3-8+deb10u7_arm64.deb
正在選中未選擇的軟件包 guile-2.2-libs:arm64。
準(zhǔn)備解壓 .../05-guile-2.2-libs_2.2.4+1-2+deb10u1_arm64.deb ...
正在解壓 guile-2.2-libs:arm64 (2.2.4+1-2+deb10u1) ...
/var/cache/apt/archives/guile-2.2-libs_2.2.4+1-2+deb10u1_arm64.deb
正在選中未選擇的軟件包 libntlm0:arm64。
準(zhǔn)備解壓 .../06-libntlm0_1.5-1+deb10u1+rebuild_arm64.deb ...
正在解壓 libntlm0:arm64 (1.5-1+deb10u1+rebuild) ...
/var/cache/apt/archives/libntlm0_1.5-1+deb10u1+rebuild_arm64.deb
正在選中未選擇的軟件包 libgsasl7。
準(zhǔn)備解壓 .../07-libgsasl7_1.8.0-8+b2_arm64.deb ...
正在解壓 libgsasl7 (1.8.0-8+b2) ...
/var/cache/apt/archives/libgsasl7_1.8.0-8+b2_arm64.deb
正在選中未選擇的軟件包 libkyotocabinet16v5:arm64。
準(zhǔn)備解壓 .../08-libkyotocabinet16v5_1.2.76-4.2+b1_arm64.deb ...
正在解壓 libkyotocabinet16v5:arm64 (1.2.76-4.2+b1) ...
/var/cache/apt/archives/libkyotocabinet16v5_1.2.76-4.2+b1_arm64.deb
正在選中未選擇的軟件包 mailutils-common。
準(zhǔn)備解壓 .../09-mailutils-common_1%3a3.5-4+rebuild_all.deb ...
正在解壓 mailutils-common (1:3.5-4+rebuild) ...
/var/cache/apt/archives/mailutils-common_1%3a3.5-4+rebuild_all.deb
正在選中未選擇的軟件包 libmailutils5:arm64。
準(zhǔn)備解壓 .../10-libmailutils5_1%3a3.5-4+rebuild_arm64.deb ...
正在解壓 libmailutils5:arm64 (1:3.5-4+rebuild) ...
/var/cache/apt/archives/libmailutils5_1%3a3.5-4+rebuild_arm64.deb
正在選中未選擇的軟件包 mailutils。
準(zhǔn)備解壓 .../11-mailutils_1%3a3.5-4+rebuild_arm64.deb ...
正在解壓 mailutils (1:3.5-4+rebuild) ...
/var/cache/apt/archives/mailutils_1%3a3.5-4+rebuild_arm64.deb
正在設(shè)置 libkyotocabinet16v5:arm64 (1.2.76-4.2+b1) ...
正在設(shè)置 libntlm0:arm64 (1.5-1+deb10u1+rebuild) ...
正在設(shè)置 mailutils-common (1:3.5-4+rebuild) ...
正在設(shè)置 libfl2:arm64 (2.6.4-6.2) ...
正在設(shè)置 exim4-config (4.92.3-8+deb10u7) ...
Adding system-user for exim (v4)
正在設(shè)置 guile-2.2-libs:arm64 (2.2.4+1-2+deb10u1) ...
正在設(shè)置 exim4-base (4.92.3-8+deb10u7) ...
exim: DB upgrade, deleting hints-db
正在設(shè)置 at (3.1.23-1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/atd.service → /lib/systemd/system/atd.service.
正在設(shè)置 libgsasl7 (1.8.0-8+b2) ...
正在設(shè)置 exim4-daemon-light (4.92.3-8+deb10u7) ...
Initializing GnuTLS DH parameter file
正在設(shè)置 libmailutils5:arm64 (1:3.5-4+rebuild) ...
正在設(shè)置 mailutils (1:3.5-4+rebuild) ...
update-alternatives: 使用 /usr/bin/frm.mailutils 來在自動(dòng)模式中提供 /usr/bin/frm (frm)
update-alternatives: 使用 /usr/bin/from.mailutils 來在自動(dòng)模式中提供 /usr/bin/from (from)
update-alternatives: 使用 /usr/bin/messages.mailutils 來在自動(dòng)模式中提供 /usr/bin/messages (messages)
update-alternatives: 使用 /usr/bin/movemail.mailutils 來在自動(dòng)模式中提供 /usr/bin/movemail (movemail)
update-alternatives: 使用 /usr/bin/readmsg.mailutils 來在自動(dòng)模式中提供 /usr/bin/readmsg (readmsg)
update-alternatives: 使用 /usr/bin/dotlock.mailutils 來在自動(dòng)模式中提供 /usr/bin/dotlock (dotlock)
update-alternatives: 使用 /usr/bin/mail.mailutils 來在自動(dòng)模式中提供 /usr/bin/mailx (mailx)
正在處理用于 systemd (241.52-deepin1) 的觸發(fā)器 ...
正在處理用于 man-db (2.8.5-2) 的觸發(fā)器 ...
正在處理用于 libc-bin (2.28.23-deepin1) 的觸發(fā)器 ...
uos@uos-PC:~/Desktop$
2、輸入at命令,在指定時(shí)間關(guān)機(jī)
uos@uos-PC:~/Desktop$ sudo -i
請(qǐng)輸入密碼:
驗(yàn)證成功
root@uos-PC:~#
root@uos-PC:~# echo "poweroff" | at 14:25
warning: commands will be executed using /bin/sh
job 3 at Thu Sep 28 14:25:00 2023
root@uos-PC:~#
3、系統(tǒng)已經(jīng)關(guān)機(jī)
工作中,我們通常遇到的問題是,如何控制systemd服務(wù)的啟動(dòng)順序,同志們第一反應(yīng)就會(huì)是使用Before=或者After=去進(jìn)行控制。 問題來了,如果服務(wù)啟動(dòng)時(shí)沒有順序要求,但是關(guān)閉時(shí)有順序要求, 該如何操作?
通過查找如下相關(guān)文檔, 我查到了這樣一段話:
https://www.freedesktop.org/software/systemd/man/systemd.unit.html
When two units with an ordering dependency between them are shut down, the inverse of the start-up order is applied. I.e. if a unit is configured with After= on another unit, the former is stopped before the latter if both are shut down.
上面這段話的意思是,如果使用After=或者Before=規(guī)定了進(jìn)程的啟動(dòng)順序, 那么關(guān)閉時(shí)的順序與啟動(dòng)時(shí)的順序?qū)⑹窍喾吹摹?/span>
比如有A、B、C三個(gè)服務(wù), 啟動(dòng)時(shí)的順序時(shí)A->B->C, 那么服務(wù)的關(guān)閉順序?qū)⑹荂->B->A。 事實(shí)是這樣的嗎? 下面通過一個(gè)小實(shí)驗(yàn)進(jìn)行驗(yàn)證。
這里我們準(zhǔn)備三個(gè)服務(wù),服務(wù)在啟動(dòng)時(shí)候會(huì)向文件中寫入相應(yīng)的啟動(dòng)和關(guān)閉日志,通過日志我們來判斷服務(wù)的啟動(dòng)和關(guān)閉順序。
首先是test1.sh, 該文件接受start/stop兩個(gè)命令行參數(shù), 啟動(dòng)時(shí)寫入日志start1, 關(guān)閉時(shí)寫入日志stop1。
#!/bin/bash
case "$1" in
start)
echo "start1" >> /home/test/test.log
;;
stop)
echo "stop1" >> /home/test/test.log
;;
*)
esac
下面是test1服務(wù)的systemd的service文件test1.service,這里我們只需要腳本執(zhí)行一次,因此使用的Type是oneshot類型,并且指定RemainAfterExit=yes,意思是該腳本只會(huì)執(zhí)行一次,并且退出后, 不會(huì)意味著服務(wù)是inacive狀態(tài), 將會(huì)顯示服務(wù)是active(exited)狀態(tài)。
[Unit]
Description=mytest:while date service
After=network.target sshd.service
[Service]
Type=oneshot
ExecStart= /home/test/test1.sh start
ExecStop= /home/test/test1.sh stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
test2.sh與test1.sh類似,只是打印的日志內(nèi)容不同。
#!/bin/bash
case "$1" in
start)
echo "start2" >> /home/test/test.log
;;
stop)
echo "stop2" >> /home/test/test.log
;;
*)
esac
test2.service同test1.service, 不同的是我在After中增加了test1.service, 這就意味著test2晚于test1啟動(dòng)。
[Unit]
Description=mytest:while date service
After=network.target sshd.service test1.service
[Service]
Type=oneshot
ExecStart= /home/test/test2.sh start
ExecStop= /home/test/test2.sh stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
test3.sh同test1.sh
#!/bin/bash
case "$1" in
start)
echo "start3" >> /home/test/test.log
;;
stop)
echo "stop3" >> /home/test/test.log
;;
*)
esac
test3.service同test1.service,不同的是我在After中增加了test2.service, 這就意味著test3晚于test2啟動(dòng)。
[Unit]
Description=mytest:while date service
After=network.target sshd.service test2.service
[Service]
Type=oneshot
ExecStart= /home/test/test3.sh start
ExecStop= /home/test/test3.sh stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
通過下面的命令將三個(gè)服務(wù)分別加入到systemd的目錄中,并且啟動(dòng)它們并設(shè)為開機(jī)啟動(dòng)。
cp test1.service /usr/lib/systemd/system/
cp test2.service /usr/lib/systemd/system/
cp test3.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl enable test1
systemctl enable test2
systemctl enable test3
systemctl start test1
systemctl start test2
systemctl start test3
此時(shí),test.log文件已經(jīng)打印出了剛剛手動(dòng)執(zhí)行啟動(dòng)命令產(chǎn)生的日志
[root@localhost test]# cat test.log
start1
start2
start3
通過上述的步驟,我們構(gòu)建出了三個(gè)服務(wù),這三個(gè)服務(wù)的啟動(dòng)順序是test1->test2->test3, 那么根據(jù)我們的推測(cè), 關(guān)閉順序應(yīng)該是test3->test2->test1,是否如此呢?
下面就是到了最終驗(yàn)證的時(shí)刻!
reboot
等待一小會(huì)后,我們打印出test.log
[root@localhost test]# cat test.log
start1
start2
start3
stop3
stop2
stop1
start1
start2
start3
可以看到停止時(shí)依次打印出了stop3,stop2,stop1。這與我們的猜想以及文檔中的說明是一致的。
systemd通過After和Before可以指定服務(wù)的啟動(dòng)順序, 在系統(tǒng)關(guān)閉時(shí),服務(wù)的關(guān)閉順序和啟動(dòng)順序是相反的, 先啟動(dòng)的后關(guān)閉,后啟動(dòng)的先關(guān)閉。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。