10.23 linux任務計劃cron10.24chkconfig工具10.25 systemd管理服務10.26 unit介紹 10.27 target介紹
阿新 • • 發佈:2017-09-19
10.23 linux任務計劃cron10.24chkconfig工具10.25 systemd管理服務10.26 unit介紹 10.27 target介紹
- 10.23 linux任務計劃cron - 10.24 chkconfig工具 - 10.25 systemd管理服務 - 10.26 unit介紹 - 10.27 target介紹 - 擴展 1. anacron http://blog.csdn.net/strikers1982/article/details/4787226 2. xinetd服(默認機器沒有安裝這個服務,需要yum install xinetd安裝) http://blog.sina.com.cn/s/blog_465bbe6b010000vi.html 3. systemd自定義啟動腳本 http://www.jb51.net/article/100457.htm # 10.23 Linux 任務計劃cron -任務計劃的配置文件 /etc/crontab ``` [[email protected] ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed [[email protected] ~]# ``` -crontab -u、-e、-l、-r -格式:分 時 日 月 周 user command -文件/var/spool/cron/usemame -分範圍0-59,時範圍0-23,日範圍0-31,月範圍0-12,周1-6 -可用格式1-5表示一個範圍1到5 -可用格式1,2,3表示1或者2或者3 -可用格式*/2表示被2整除的數字,比如小時,那就是每隔2小時 -要保證服務啟動狀態 -systemctl strat crond.service -在root下定義一個用戶計劃crontab -e,這樣就進入到了crontab配置文件中,用法和vim一樣,按i進入編輯模式 ``` [[email protected] ~]# crontab -e no crontab for root - using an empty one 0 3 1-10 */2 2,5 /bin/bash /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log 大概的格式就是這樣 "/tmp/crontab.rWAsXu" 0L, 0C ``` -啟動服務systemctl start crond,有了這個進程 /usr/sbin/crond 就說明啟動了 ``` [[email protected] ~]# systemctl start crond [[email protected] ~]# ps aux |grep cron root 492 0.0 0.1 126220 1612 ? Ss 21:22 0:00 /usr/sbin/crond -n root 2594 0.0 0.0 112664 972 pts/0 S+ 22:08 0:00 grep --color=auto cron [[email protected] ~]# ``` -還可以使用systmctl status crond 查看 ,Active: active (running)表示它已經啟動了 ``` [[email protected] ~]# systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since 日 2017-09-10 21:22:17 CST; 47min ago Main PID: 492 (crond) CGroup: /system.slice/crond.service └─492 /usr/sbin/crond -n 9月 10 21:22:17 aminglinux-001 systemd[1]: Started Command Scheduler. 9月 10 21:22:17 aminglinux-001 systemd[1]: Starting Command Scheduler... 9月 10 21:22:17 aminglinux-001 crond[492]: (CRON) INFO (RANDOM_DELAY will be scaled wi....) 9月 10 21:22:17 aminglinux-001 crond[492]: (CRON) INFO (running with inotify support) Hint: Some lines were ellipsized, use -l to show in full. [[email protected] ~]# ``` -現在把它停掉 再看下它的狀態 Active: inactive (dead) 表示已經停止了 ``` [[email protected] ~]# systemctl stop crond [[email protected] ~]# systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: inactive (dead) since 日 2017-09-10 22:12:11 CST; 9s ago Process: 492 ExecStart=/usr/sbin/crond -n $CRONDARGS (code=exited, status=0/SUCCESS) Main PID: 492 (code=exited, status=0/SUCCESS) 9月 10 21:22:17 aminglinux-001 systemd[1]: Started Command Scheduler. 9月 10 21:22:17 aminglinux-001 systemd[1]: Starting Command Scheduler... 9月 10 21:22:17 aminglinux-001 crond[492]: (CRON) INFO (RANDOM_DELAY will be scaled wi....) 9月 10 21:22:17 aminglinux-001 crond[492]: (CRON) INFO (running with inotify support) 9月 10 22:12:11 aminglinux-001 systemd[1]: Stopping Command Scheduler... 9月 10 22:12:11 aminglinux-001 systemd[1]: Stopped Command Scheduler. Hint: Some lines were ellipsized, use -l to show in full. [[email protected] ~]# ``` -[[email protected] ~]# systemctl start crond -有時候任務計劃,寫了一個計劃 放到配置文件裏,但是就是沒執行,據老師的經驗,可能腳本裏僅僅是用了一個命令,而沒有用絕對路徑, - 要麽把命令寫絕對路徑,要麽把命令的路徑加到變量裏面來,最好的辦法就是寫絕對路徑 - 建議大家,每次寫一個任務計劃都要追加一個 文件,日誌文件,不管錯誤還是正確 都有據可查 -任務計劃怎麽去備份呢 ``` [[email protected] ~]# crontab -l no crontab for root [[email protected] ~]# ``` -先crontab -e 隨便寫一個任務計劃 ``` [[email protected] ~]# crontab -e no crontab for root - using an empty one 1 10 * 2 * /usr/bin/find /tmp/ -type f -mtime +100 |xargs rm -f ~ ~ ~ :wq ``` -加完了任務計劃之後 查看一下 conrtab -l 可以看出來 ``` [[email protected] ~]# crontab -l 1 10 * 2 * /usr/bin/find /tmp/ -type f -mtime +100 |xargs rm -f [[email protected] ~]# ``` -將以用戶的名字命名一個文件,這個文件內容就是你的計劃任務列表,如果備份的話就是把這個目錄文件拷貝一份就可以 ``` [[email protected] ~]# cat /var/spool/cron/root 1 10 * 2 * /usr/bin/find /tmp/ -type f -mtime +100 |xargs rm -f [[email protected] ~]# ``` -crontab -e 編輯 -crontab -l 查看 -crontab -r 刪除 ``` [[email protected] ~]# crontab -r [[email protected] ~]# crontab -l no crontab for root [[email protected] ~]# ``` -crontab -u root -l 指定一個用戶 ``` [[email protected] ~]# crontab -u root -l no crontab for root [[email protected] ~]# ``` # 10.24 chkconfig 工具 -linux系統服務管理 -chkconfig --list -命令解釋:當前系統下使用chkconfig的服務都有哪些 ``` [[email protected] ~]# chkconfig --list 註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。 欲查看對特定 target 啟用的服務請執行 ‘systemctl list-dependencies [target]‘。 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:開 3:開 4:開 5:開 6:關 [[email protected] ~]# ``` -一個netconsole,另一個是network,6版本之前的使用的管理機制是sysV ,7版本的用的管理機制叫 systemd, -這個服務在這個配置文件下/etc/init.d/ ``` [[email protected] ~]# ls /etc/init.d/ functions netconsole network README [[email protected] ~]# ``` -chkconfig network off 把network服務都關了 ``` [[email protected] ~]# chkconfig network off [[email protected] ~]# chkconfig --list 註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。 欲查看對特定 target 啟用的服務請執行 ‘systemctl list-dependencies [target]‘。 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:關 3:關 4:關 5:關 6:關 [[email protected] ~]# ``` -chkconfig network on 再把network服務打開 ``` [[email protected] ~]# chkconfig network on [[email protected] ~]# chkconfig --list 註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。 欲查看對特定 target 啟用的服務請執行 ‘systemctl list-dependencies [target]‘。 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:開 3:開 4:開 5:開 6:關 [[email protected] ~]# ``` - network 0:關 (關機狀態) 1:關(單用戶) 2:開 3:開 4:開 5:開 6:關(重啟) - 在CentOS 6 0級別是關機,1級別是單用戶,2 比 3 少了一個NFS服務,4級別是一個保留的級別,5級別同樣的是多用戶,帶圖形,6級別是重啟 -指定某一個級別是開啟還是關閉 -chkconfig --level 3 network off 把3級別的network 服務關了 ``` [[email protected] ~]# chkconfig --list 註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。 欲查看對特定 target 啟用的服務請執行 ‘systemctl list-dependencies [target]‘。 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:開 3:開 4:開 5:開 6:關 [[email protected] ~]# chkconfig --level 3 network off [[email protected] ~]# chkconfig --list 註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。 欲查看對特定 target 啟用的服務請執行 ‘systemctl list-dependencies [target]‘。 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:開 3:關 4:開 5:開 6:關 [[email protected] ~]# ``` -chkconfig --level 345 network off 把3、4、5級別關了network服務 ``` [[email protected] ~]# chkconfig --level 345 network off [[email protected] ~]# chkconfig --list 註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。 欲查看對特定 target 啟用的服務請執行 ‘systemctl list-dependencies [target]‘。 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:開 3:關 4:關 5:關 6:關 [[email protected] ~]# ``` -可以把一個腳本加入到一個服務列表裏面來 -chkconfig --add network ``` [[email protected] ~]# cd /etc/init.d [[email protected] init.d]# ls functions netconsole network README [[email protected] init.d]# cp network 123 [[email protected] init.d]# ls -l 總用量 40 -rwxr-xr-x 1 root root 6643 9月 11 20:49 123 -rw-r--r--. 1 root root 15131 9月 12 2016 functions -rwxr-xr-x. 1 root root 2989 9月 12 2016 netconsole -rwxr-xr-x. 1 root root 6643 9月 12 2016 network -rw-r--r--. 1 root root 1160 11月 7 2016 README [[email protected] init.d]# chkconfig --list 註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。 欲查看對特定 target 啟用的服務請執行 ‘systemctl list-dependencies [target]‘。 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:開 3:關 4:關 5:關 6:關 [[email protected] init.d]# chkconfig --add 123 [[email protected] init.d]# chkconfig --list 註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。 欲查看對特定 target 啟用的服務請執行 ‘systemctl list-dependencies [target]‘。 123 0:關 1:關 2:開 3:開 4:開 5:開 6:關 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:開 3:關 4:關 5:關 6:關 [[email protected] init.d]# ``` -用vim 打開123 看下 ``` [[email protected] init.d]# vim 123 #! /bin/bash # # network Bring up/down networking # # chkconfig: 2345 10 90 # description: Activates/Deactivates all network interfaces configured to # start at boot time. # ### BEGIN INIT INFO # Provides: $network # Should-Start: iptables ip6tables NetworkManager-wait-online NetworkManager $network-pre # Short-Description: Bring up/down networking # Description: Bring up/down networking ### END INIT INFO # Source function library. . /etc/init.d/functions if [ ! -f /etc/sysconfig/network ]; then exit 6 fi "123" 254L, 6643C ``` -同樣也可以刪除自定義服務 chkconfig --del network ``` [[email protected] init.d]# chkconfig --list 註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。 欲查看對特定 target 啟用的服務請執行 ‘systemctl list-dependencies [target]‘。 123 0:關 1:關 2:開 3:開 4:開 5:開 6:關 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:開 3:關 4:關 5:關 6:關 [[email protected] init.d]# vim 123 [[email protected] init.d]# chkconfig --del 123 [[email protected] init.d]# chkconfig --list 註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。 欲查看對特定 target 啟用的服務請執行 ‘systemctl list-dependencies [target]‘。 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:開 3:關 4:關 5:關 6:關 [[email protected] init.d]# ``` # 10.25 systemd管理服務 - 在centos 6之前包括 6 我們可以用chkconfig這個工具管理系統的服務,在centos 7裏也可以使用,但是會提示,目前已經使用systemd 服務 -在centos7裏面會提示使用命令systemctl list-unit-files 來查看所有的服務,這個包含了很多東西,不僅有service,還有target,socket ``` [[email protected] init.d]# systemctl list-unit-files UNIT FILE STATE UNIT FILE STATE proc-sys-fs-binfmt_misc.automount static dev-hugepages.mount static UNIT FILE STATE proc-sys-fs-binfmt_misc.automount static dev-hugepages.mount static dev-mqueue.mount static proc-sys-fs-binfmt_misc.mount static sys-fs-fuse-connections.mount static sys-kernel-config.mount static sys-kernel-debug.mount static tmp.mount disabled brandbot.path disabled systemd-ask-password-console.path static systemd-ask-password-plymouth.path static systemd-ask-password-wall.path static session-1.scope static session-2.scope static arp-ethers.service disabled auditd.service enabled [email protected] enabled blk-availability.service disabled brandbot.service static [email protected] static chrony-wait.service disabled lines 1-22 ``` -下面先來看看幾個和systemd服務相關的命令 -使用命令systemctl list-units --all --type=service 指定類型為service服務的,列出來所有的都是service,還有其他信息,包括描述信息,是否是running active loaded ``` [[email protected] init.d]# systemctl list-units --all --type=service UNIT LOAD ACTIVE SUB DESCRIPTION auditd.service loaded active running Security Auditing Servi brandbot.service loaded inactive dead Flexible Branding Servi chronyd.service loaded active running NTP client/server cpupower.service loaded inactive dead Configure CPU power rel crond.service loaded active running Command Scheduler dbus.service loaded active running D-Bus System Message Bu ● display-manager.service not-found inactive dead display-manager.service dm-event.service loaded inactive dead Device-mapper event dae dracut-shutdown.service loaded inactive dead Restore /run/initramfs ebtables.service loaded inactive dead Ethernet Bridge Filteri emergency.service loaded inactive dead Emergency Shell ● exim.service not-found inactive dead exim.service firewalld.service loaded active running firewalld - dynamic fir [email protected] loaded active running Getty on tty1 ip6tables.service loaded inactive dead IPv6 firewall with ip6t ● ipset.service not-found inactive dead ipset.service iptables.service loaded inactive dead IPv4 firewall with ipta irqbalance.service loaded inactive dead irqbalance daemon ● kdump.service loaded failed failed Crash recovery kernel a kmod-static-nodes.service loaded active exited Create list of required ● libvirtd.service not-found inactive dead libvirtd.service lines 1-22 LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 92 loaded units listed. To show all installed unit files use ‘systemctl list-unit-files‘. lines 73-100/100 (END) ``` -幾個常用的和服務相關的命令 -systemctl enable crond.service 讓服務開機啟動 -sysemctl disable crond 不讓服務開機啟動 ``` [[email protected] init.d]# systemctl enable crond.service [[email protected] init.d]# systemctl disable crond Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service. ``` -systemctl status crond 查看狀態 ``` [[email protected] init.d]# systemctl enable crond.service Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service. [[email protected] init.d]# systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since 一 2017-09-11 20:21:06 CST; 2h 27min ago Main PID: 496 (crond) CGroup: /system.slice/crond.service └─496 /usr/sbin/crond -n 9月 11 20:21:06 aminglinux-001 systemd[1]: Started Command Scheduler. 9月 11 20:21:06 aminglinux-001 systemd[1]: Starting Command Scheduler... 9月 11 20:21:06 aminglinux-001 crond[496]: (CRON) INFO (RANDOM_DELAY will ...) 9月 11 20:21:06 aminglinux-001 crond[496]: (CRON) INFO (running with inoti...) Hint: Some lines were ellipsized, use -l to show in full. [[email protected] init.d]# ``` -systemctl stop crond 停止服務 -systemctl start crond 啟動服務 -systemctl restart crond 重啟服務 -systemctl is enabled crond 檢查服務是否開機啟動 ``` [[email protected] init.d]# systemctl enable crond.service Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service. [[email protected] init.d]# systemctl is-enabled crond enabled [[email protected] init.d]# [[email protected] init.d]# systemctl disable crond Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service. [[email protected] init.d]# systemctl is-enabled crond disabled [[email protected] init.d]# ``` - 從這裏可以獲得service的配置文件內容 ``` [[email protected] init.d]# systemctl enable crond.service Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service. [[email protected] init.d]# ``` - 可以看下這個文件內容 ``` [[email protected] init.d]# cat /etc/systemd/system/multi-user.target.wants/crond.service [Unit] Description=Command Scheduler After=auditd.service systemd-user-sessions.service time-sync.target [Service] EnvironmentFile=/etc/sysconfig/crond ExecStart=/usr/sbin/crond -n $CRONDARGS ExecReload=/bin/kill -HUP $MAINPID KillMode=process [Install] WantedBy=multi-user.target [[email protected] init.d]# [[email protected] init.d]# ls -l /etc/systemd/system/multi-user.target.wants/crond.service lrwxrwxrwx 1 root root 37 9月 11 22:55 /etc/systemd/system/multi-user.target.wants/crond.service -> /usr/lib/systemd/system/crond.service [[email protected] init.d]# ``` -它實際上是一個軟鏈接,軟鏈接到了/usr/lib/systemd/system/crond.service 這裏,如果改成disable,那個軟鏈接文件就被挪走了 ``` [[email protected] init.d]# systemctl disable crond Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service. [[email protected] init.d]# ls -l /etc/systemd/system/multi-user.target.wants/crond.service ls: 無法訪問/etc/systemd/system/multi-user.target.wants/crond.service: 沒有那個文件或目錄 [[email protected] init.d]# ``` # 10.26 unit介紹 -通過enable disable大概的了解了,如果是enable 就會創建一個軟鏈接,軟鏈接目錄所在的源目錄是這個目錄/usr/lib/systemd/system/,這個目錄下面都有上面東西呢,可以來看下, ``` [[email protected] init.d]# ls /usr/lib/systemd/system arp-ethers.service remote-fs.target auditd.service rescue.service [email protected] rescue.target basic.target rescue.target.wants basic.target.wants rhel-autorelabel-mark.service blk-availability.service rhel-autorelabel.service bluetooth.target rhel-configure.service brandbot.path rhel-dmesg.service brandbot.service rhel-domainname.service [email protected] rhel-import-state.service [email protected] ``` -這裏很多文件,只列取了一部分,service. .target .timer 很多類型,這些都叫unit -主要分成這幾種類型 -service 系統服務 -target 多個unit組成的組 ``` [[email protected] system]# ls -l runlevel* lrwxrwxrwx. 1 root root 15 7月 17 04:29 runlevel0.target -> poweroff.target 關機 lrwxrwxrwx. 1 root root 13 7月 17 04:29 runlevel1.target -> rescue.target 救援模式 lrwxrwxrwx. 1 root root 17 7月 17 04:29 runlevel2.target -> multi-user.target 多用戶模式 lrwxrwxrwx. 1 root root 17 7月 17 04:29 runlevel3.target -> multi-user.target lrwxrwxrwx. 1 root root 17 7月 17 04:29 runlevel4.target -> multi-user.target lrwxrwxrwx. 1 root root 16 7月 17 04:29 runlevel5.target -> graphical.target 圖形化界面 lrwxrwxrwx. 1 root root 13 7月 17 04:29 runlevel6.target -> reboot.target 重啟 runlevel1.target.wants: 總用量 0 lrwxrwxrwx. 1 root root 39 7月 17 04:29 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service runlevel2.target.wants: 總用量 0 lrwxrwxrwx. 1 root root 39 7月 17 04:29 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service runlevel3.target.wants: 總用量 0 lrwxrwxrwx. 1 root root 39 7月 17 04:29 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service runlevel4.target.wants: 總用量 0 lrwxrwxrwx. 1 root root 39 7月 17 04:29 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service runlevel5.target.wants: 總用量 0 lrwxrwxrwx. 1 root root 39 7月 17 04:29 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service [[email protected] system]# ``` - [ ] unit裏面有一種類型,target,實際上就是多個service 多個unit組成的一個組,形成的一個target -device 硬件設備 -mount 文件系統掛載點 -automount 自動掛載點 -path 文件或路徑 -scope 不是由systemd啟動的外部進程 -slice 進程組 -snapshot systemd 快照 -socket 進程間通信套接字 -sawp swap 文件 -timer 定時器 -unit相關的命令 -systemctl list units列出正在運行的unit ``` [[email protected] system]# systemctl list-units UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executabl sys-devices-pci0000:00-0000:00:07.1-ata2-host2-target2:0:0-2:0:0:0-block-sr0. sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda1. sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda2. sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda3. sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda.devic sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:1-0:0:1:0-block-sdb-sdb1. sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:1-0:0:1:0-block-sdb-sdb2. sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:1-0:0:1:0-block-sdb-sdb3. sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:1-0:0:1:0-block-sdb.devic sys-devices-pci0000:00-0000:00:11.0-0000:02:01.0-net-ens33.device loaded acti sys-devices-pci0000:00-0000:00:11.0-0000:02:02.0-sound-card0.device loaded ac sys-devices-pci0000:00-0000:00:11.0-0000:02:05.0-net-ens37.device loaded acti sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged /sys sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged /sys sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged /sys sys-devices-pnp0-00:05-tty-ttyS0.device loaded active plugged /sys/devices/ sys-devices-virtual-block-dm\x2d0.device loaded active plugged /sys/devices sys-module-configfs.device loaded active plugged /sys/module/configfs sys-subsystem-net-devices-ens33.device loaded active plugged 82545EM Gigabi sys-subsystem-net-devices-ens37.device loaded active plugged 82545EM Gigabi -.mount loaded active mounted / boot.mount loaded active mounted /boot dev-hugepages.mount loaded active mounted Huge Pages File System dev-mqueue.mount loaded active mounted POSIX Message Queue File S run-user-0.mount loaded active mounted /run/user/0 lines 1-27 ``` - systemctl list-units --all列出所有,包括失敗的或者inactive的unit ``` [[email protected] system]# systemctl list-units --all UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Exec dev-block-8:17.device loaded active plugged LVM PV xyK6vx-3HQZ-sto dev-block-8:18.device loaded active plugged LVM PV HYu2w5-CNfo-RUj dev-block-8:19.device loaded active plugged LVM PV LXcUeS-f5N5-SSM dev-cdrom.device loaded active plugged VMware_Virtual_IDE_CDR dev-disk-by\x2did-ata\x2dVMware_Virtual_IDE_CDROM_Drive_10000000000000000001. dev-disk-by\x2did-dm\x2dname\x2dvg1\x2dlv1.device loaded active plugged dev-disk-by\x2did-dm\x2duuid\x2dLVM\x2ddrz04oPSnwDByRIsSdtvDt25BrMdjVp53fQjCJ dev-disk-by\x2did-lvm\x2dpv\x2duuid\x2dHYu2w5\x2dCNfo\x2dRUjA\x2dkeHq\x2doUmd dev-disk-by\x2did-lvm\x2dpv\x2duuid\x2dLXcUeS\x2df5N5\x2dSSM3\x2dUINM\x2ddcYk dev-disk-by\x2did-lvm\x2dpv\x2duuid\x2dxyK6vx\x2d3HQZ\x2dstol\x2dpCOH\x2d1NbT dev-disk-by\x2dlabel-CentOS\x5cx207\x5cx20x86_64.device loaded active pl dev-disk-by\x2dpath-pci\x2d0000:00:07.1\x2data\x2d2.0.device loaded active dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:0:0.device loaded a dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:0:0\x2dpart1.device lo dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:0:0\x2dpart2.device lo dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:0:0\x2dpart3.device lo dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:1:0.device loaded a dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:1:0\x2dpart1.device lo dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:1:0\x2dpart2.device lo dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:1:0\x2dpart3.device lo dev-disk-by\x2duuid-2016\x2d12\x2d05\x2d13\x2d55\x2d45\x2d00.device loaded dev-disk-by\x2duuid-2bb1bac0\x2dd949\x2d4a35\x2dab9d\x2d4cf97f48c94a.device l dev-disk-by\x2duuid-a6506adf\x2d10f7\x2d49e5\x2dbe5b\x2d144453695c62.device l dev-disk-by\x2duuid-af686d36\x2d72dc\x2d4c1d\x2da150\x2dff8b83f84d1a.device l dev-disk-by\x2duuid-f8d5787a\x2d51e0\x2d407a\x2d8000\x2dfe0385f685eb.device l lines 1-27 ``` -systemctl list-units --all --state=inactive 列出inactive的unit ``` [[email protected] system]# systemctl list-units --all --state=inactive UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.mount loaded inactive dead Arbitrary Executable Fi sys-fs-fuse-connections.mount loaded inactive dead FUSE Control File Syste tmp.mount loaded inactive dead Temporary Directory systemd-ask-password-console.path loaded inactive dead Dispatch Password R brandbot.service loaded inactive dead Flexible Branding Service cpupower.service loaded inactive dead Configure CPU power relat ● display-manager.service not-found inactive dead display-manager.service dm-event.service loaded inactive dead Device-mapper event daemo dracut-shutdown.service loaded inactive dead Restore /run/initramfs ebtables.service loaded inactive dead Ethernet Bridge Filtering emergency.service loaded inactive dead Emergency Shell ● exim.service not-found inactive dead exim.service ip6tables.service loaded inactive dead IPv6 firewall with ip6tab ● ipset.service not-found inactive dead ipset.service iptables.service loaded inactive dead IPv4 firewall with iptabl irqbalance.service loaded inactive dead irqbalance daemon ● libvirtd.service not-found inactive dead libvirtd.service ● lvm2-activation.service not-found inactive dead lvm2-activation.service lvm2-lvmpolld.service loaded inactive dead LVM2 poll daemon microcode.service loaded inactive dead Load CPU microcode update ● ntpd.service not-found inactive dead ntpd.service ● ntpdate.service not-found inactive dead ntpdate.service plymouth-quit-wait.service loaded inactive dead Wait for Plymouth Boot Sc plymouth-quit.service loaded inactive dead Terminate Plymouth Boot S plymouth-read-write.service loaded inactive dead Tell Plymouth To Write Ou plymouth-start.service loaded inactive dead Show Plymouth Boot Screen lines 1-27 ``` -systemctl list-units --type=service 列出狀態為active的service ``` [[email protected] system]# systemctl list-units --type=service UNIT LOAD ACTIVE SUB DESCRIPTION auditd.service loaded active running Security Auditing Service chronyd.service loaded active running NTP client/server crond.service loaded active running Command Scheduler dbus.service loaded active running D-Bus System Message Bus firewalld.service loaded active running firewalld - dynamic firewal [email protected] loaded active running Getty on tty1 ● kdump.service loaded failed failed Crash recovery kernel armin kmod-static-nodes.service loaded active exited Create list of required sta lvm2-lvmetad.service loaded active running LVM2 metadata daemon lvm2-monitor.service loaded active exited Monitoring of LVM2 mirrors, [email protected]:17.service loaded active exited LVM2 PV scan on device 8:17 [email protected]:18.service loaded active exited LVM2 PV scan on device 8:18 [email protected]:19.service loaded active exited LVM2 PV scan on device 8:19 network.service loaded active exited LSB: Bring up/down networki ● NetworkManager-wait-online.service loaded failed failed Network Manager Wait NetworkManager.service loaded active running Network Manager polkit.service loaded active running Authorization Manager postfix.service loaded active running Postfix Mail Transport Agen rhel-dmesg.service loaded active exited Dump dmesg to /var/log/dmes rhel-import-state.service loaded active exited Import network configuratio rhel-readonly.service loaded active exited Configure read-only root su rsyslog.service loaded active running System Logging Service sshd.service loaded active running OpenSSH server daemon sysstat.service loaded active exited Resets System Activity Logs systemd-journal-flush.service loaded active exited Flush Journal to Persiste systemd-journald.service loaded active running Journal Service lines 1-27 ``` - systemctl is-active crond.service 查看某個服務是否為active - systemctl is-enabled crond.service 查看某個服務是否為enabled ``` [[email protected] system]# systemctl is-active crond.service active [[email protected] system]# systemctl is-enabled crond.service disabled [[email protected] system]# systemctl enable crond Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service. [[email protected] system]# systemctl is-enabled crond.service enabled [[email protected] system]# ``` # 10.27 target介紹 -linux系統服務管理-systemd -系統為了方便管理用target來管理unit -systemctl list-unit-files --type=target 可以列出所有的tartget ``` [[email protected] ~]# systemctl list-unit-files --type=target UNIT FILE STATE basic.target static bluetooth.target static cryptsetup-pre.target static cryptsetup.target static ctrl-alt-del.target disabled default.target enabled emergency.target static final.target static getty.target static graphical.target static halt.target disabled hibernate.target static hybrid-sleep.target static initrd-fs.target static initrd-root-fs.target static initrd-switch-root.target static initrd.target static iprutils.target disabled kexec.target disabled local-fs-pre.target static local-fs.target static machines.target disabled multi-user.target enabled network-online.target static network-pre.target static network.target static lines 1-27 ``` -systemctl list-dependencies multi-user.target 查看指定的target下面有哪些unit ``` [[email protected] ~]# systemctl list-dependencies multi-user.target multi-user.target ● ├─auditd.service ● ├─brandbot.path ● ├─chronyd.service ● ├─crond.service ● ├─dbus.service ● ├─irqbalance.service ● ├─kdump.service ● ├─network.service ● ├─NetworkManager.service ● ├─plymouth-quit-wait.service ● ├─plymouth-quit.service ● ├─postfix.service ● ├─rsyslog.service ● ├─sshd.service ● ├─sysstat.service ● ├─systemd-ask-password-wall.path ● ├─systemd-logind.service ● ├─systemd-readahead-collect.service ● ├─systemd-readahead-replay.service ● ├─systemd-update-utmp-runlevel.service ● ├─systemd-user-sessions.service ● ├─tuned.service ● ├─vmtoolsd.service ● ├─basic.target ● │ ├─firewalld.service ● │ ├─microcode.service lines 1-27 ... ● │ │ ├─systemd-random-seed.service ● │ │ ├─systemd-sysctl.service ● │ │ ├─systemd-tmpfiles-setup-dev.service ● │ │ ├─systemd-tmpfiles-setup.service ● │ │ ├─systemd-udev-trigger.service ● │ │ ├─systemd-udevd.service ● │ │ ├─systemd-update-done.service ● │ │ ├─systemd-update-utmp.service ● │ │ ├─systemd-vconsole-setup.service ● │ │ ├─cryptsetup.target ● │ │ ├─local-fs.target ● │ │ │ ├─-.mount ● │ │ │ ├─boot.mount ● │ │ │ ├─rhel-import-state.service ● │ │ │ ├─rhel-readonly.service ● │ │ │ └─systemd-remount-fs.service ● │ │ └─swap.target ● │ │ └─dev-disk-by\x2duuid-f8d5787a\x2d51e0\x2d407a\x2d8000\x2dfe0385f685eb. ● │ └─timers.target ● │ └─systemd-tmpfiles-clean.timer ● ├─getty.target ● │ └─[email protected] ● └─remote-fs.target lines 63-89/89 (END) ``` -查看系統默認的target, systemctl get-default ``` [[email protected] ~]# systemctl get-default multi-user.target [[email protected] ~]# ``` -設置一個默認的target -systemctl set-default multi-user.target ``` [[email protected] ~]# systemctl set-default multi-user.target Removed symlink /etc/systemd/system/default.target. Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target. [[email protected] ~]# ``` -設置默認target的時候 它會創建一個軟鏈接/etc/systemd/system/default.target ``` [[email protected] ~]# ls /etc/systemd/system/default.target /etc/systemd/system/default.target [[email protected] ~]# ls -l !$ ls -l /etc/systemd/system/default.target lrwxrwxrwx 1 root root 41 9月 12 22:16 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target [[email protected] ~]# ``` - [x] 一個service它屬於一種類型的unit,unit實際上包含很多種類型,其中一個類型就是service,一個service就是一種類型的 unit, - [x] 而多個unit組成一個target - [x] 一個target裏面包含多個service -cat /usr/lib/systemd/system/sshd.service 看[install]部分 WantedBy=multi-user.target ``` [[email protected] ~]# cat /usr/lib/systemd/system/sshd.service [Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service [Service] Type=forking PIDFile=/var/run/sshd.pid EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target [[email protected] ~]# ``` - 看下/usr/lib/systemd/system/crond.service 同樣的也是屬於multi-user.target ``` [[email protected] ~]# cat /usr/lib/systemd/system/crond.service [Unit] Description=Command Scheduler After=auditd.service systemd-user-sessions.service time-sync.target [Service] EnvironmentFile=/etc/sysconfig/crond ExecStart=/usr/sbin/crond -n $CRONDARGS ExecReload=/bin/kill -HUP $MAINPID KillMode=process [Install] WantedBy=multi-user.target [[email protected] ~]# ``` - [x] 系統有多種unit組成,這麽多的unit,為了方便管理,把他們歸類,歸類若幹個類,每組把它叫做一個tartget,也就是說target是由多種unit組成的,那service 它屬於unit ,屬於一種類型的unit ,一個target包含若幹個service, - systemctl get-default 查看系統默認的target - 也可以用systemctl set-default multi-user.target 設置一個默認的target - 擴展 1. anacron http://blog.csdn.net/strikers1982/article/details/4787226 anacron 是幹什麽的呢? 簡單說吧,crontab 可以指定任務在每天幾點鐘運行,可是如果那個鐘點機器沒有開, 那個任務便錯過了時間在一個新的時間輪回之內不再運行了。 而 anacron 可以在每天、每周、每月(時間輪回天數可以自己指定)服務啟動時便會 將所有服務置為 Ready 狀態,只等時間一到,便執行任務。 說得有點別扭,一起來從配置文件入手來分析 anacron 吧。 anacron 的執行方式。 這玩意兒遠看蠻簡單的,可是真操作起來就沒那麽輕松了。 anacron 是幹什麽的呢?簡單說吧,crontab 可以指定任務在每天幾點鐘運行,可是如果那個鐘點機器沒有開,那個任務便錯過了時間在一個新的時間輪回之內不再運行了。而 anacron 可以在每天、每周、每月(時間輪回天數可以自己指定)服務啟動時便會將所有服務置為 Ready 狀態,只等時間一到,便執行任務,說得有點別扭,一起來從配置文件入手來分析 anacron 吧。 # /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 1 5 cron.daily run-parts /etc/cron.daily 7 70 cron.weekly run-parts /etc/cron.weekly 30 75 cron.monthly run-parts /etc/cron.monthly 首先前兩行註釋,告訴你文件是做什麽用的,從 man 5 anacrontab 獲取配置文件幫助。 第5、6行是定義基本環境變量,保證程序可以正常運行。 最後三行是默認配置下所執行的任務,也是最重要的,任務配置部分。 分四部分: period delay job-identifier command <輪回天數> <輪回內的重試時間> <任務描述> <命令> 7 70 cron.weekly run-parts /etc/cron.weekly 首先是輪回天數,即是指任務在多少天內執行一次,monthly 就是一個月(30天)內執行,weekly 即是在一周之內執行一次。 其 實這種說法不太好,因為它用的不是人類的日歷來定啟動任務的時間,而是利用天數,像"每月",是指在"每月"執行的任務完成後的三十天內不再執行第二次, 而不是自然月的"三十天左右",不管什麽原因(比如關機了超過一個月),三十天後 anacron 啟動之時該任務依然會被執行,"周"任務同理。 第 二部分 delay 是指輪回內的重試時間,這個意思有兩部分,一個是 anacron 啟動以後該服務 ready 暫不運行的時間(周任務的 70 delay 在 anacron 啟動後70分鐘內不執行,而處於 ready 狀態),另一個是指如果該任務到達運行時間後卻因為某種原因沒有執行(比如前一個服務還沒有運行完成,anacron 在 /etc/init.d 的腳本中加了一個 -s 參數,便是指在前一個任務沒有完成時不執行下一個任務),依然以周任務和月任務為例,周任務在啟動 anacron 後的 70 分鐘執行,月任務在服務啟動後 75 分鐘執行,但是,如果月任務到達服務啟動後 75 分鐘,可是周任務運行超過5分鐘依然沒有完成,那月任務將會進入下一個 75 分鐘的輪回,在下一個 75 分鐘時再檢查周任務是否完成,如果前一個任務完成了那月任務開始運行。 (這裏有一個問題,如果周任務在後臺死掉了,成僵屍進程了,難道月任務永遠也不執行?!) 第 三部分 job-identifier 非常簡單,anacron 每次啟動時都會在 /var/spool/anacron 裏面建立一個以 job-identifier 為文件名的文件,裏面記錄著任務完成的時間,如果任務是第一次運行的話那這個文件應該是空的。這裏只要註意不要用不可以作為文件名的字符串便可,可能的話 文件名也不要太長。註:根據我的理解,其實就是anacron運行時,會去檢查“/var/spool/anacron/這部分”文件中的內容,內容為一個日期,根據這個日期判斷下面的第四部分要不要執行。 比如說這裏寫的是cron.daily,然後/var/spool/anacron/cron.daily文件中記錄的日期為昨天的話,那anancron執行後就行執行這一行對應第四行的動作。 第四部分最為簡單,僅僅是你想運行的命令,run-parts 我原以為是 anacron 配置文件的語法,後來才看到有一個 /usr/bin/run-parts,可以一次運行整個目錄的可執行程序。 實戰自運行任務,讓我們以兩種不同的方式寫一個自己運行的任務,這樣就更好理解了! 寫一個 /etc/cron.daily/wall.cron,內容為如下: wall anacron is running/! pstree > /tmp/pstree- .log然後將rmf/var/spool/anacron/將所有任務置為都未完成的狀態,重新啟動anacron:serviceanacronrestart,可以psA看看,anacron已經運行在後臺了。等5分鐘以後(因為還有其它任務在運行,時間可能會微微多於5分鐘),屏幕上將輸出anacronisrunning!同時/tmp下也留下兩個文件:anacron .ps 和 pstree- .log, 為當時 anacron 的進程號。 還有一種寫法直接寫入 /etc/anacrontab,一步一步來,把 /etc/anacrontab 中的 daily, weekly, monthly 三行註釋掉,然後在末尾加入一行: 1 1 anacron.test /etc/cron.daily/wall.cron 刪除 /var/spool/anacron 目錄中的文件後重新啟動 anacron 服務,等一分種過去之後屏幕上又會輸出成功的信息:anacron is running! 任務完成之後用 ps -A 查看運行中的進程,會發現 anacron 在運行完所有任務之後自動退出了。 這使魯瑩引出了一個問題:anacron 完成所有任務退出之後,如果不關機或者重新啟動 anacron 服務,進入下一個時間輪回,由誰來啟動那些任務呢? 確實是個問題,我想要不在 anacrontab 指定一個很大很大的天數,讓 anacron 永遠也不退出(36500 一百年夠了吧。 ^_^),要不系統會每隔一個月調用一次 anacron(manpage 好像是這麽寫的)。 本文轉自 http://blog.csdn.net/dycwahaha/archive/2007/12/20/1954938.aspx 2. xinetd服(默認機器沒有安裝這個服務,需要yum install xinetd安裝) http://blog.sina.com.cn/s/blog_465bbe6b010000vi.html 使用xinetd管理網絡應用服務 中科院計算所 李洋 隨著互聯網的不斷發展以及Linux系統的不斷完善,以Linux為系統核心的網絡服務器的比重正在逐年上升 language=javascript1.1 src="http://ad.ccw.com.cn/adshow.asp?positionID=38&js=1&innerJs=1"> 。從WWW服務器到目前流行的遊戲服務器,絕大多數都在采用Linux作為服務平臺。正是由於各種應用的不斷出現和用戶群的增長,基於Linux的系統應當擁有完善的安全措施,應當足夠堅固、能夠抵抗來自Internet的侵襲,這也正是Linux之所以流行並且成為Internet骨幹力量的主要原因。一方面,Linux為用戶提供了多種優質的網絡服務,包括Http、Ftp、Smtp、Pop3等;另一方面,服務的增多意味著更多的風險。每種服務本身都必然存在著某些缺陷,而這些缺陷很有可能被高明的黑客利用來對系統進行攻擊。所以,提供特定服務的服務器應該盡可能開放提供服務必不可少的端口,而將與服務器服務無關的服務關閉,比如:一臺作為www和ftp服務器的機器,應該只開放80和25端口,而將其他無關的服務如關掉,以減少系統漏洞。本專題將著重講述在Linux系統中如何使用xinetd機制來管理網絡應用服務。 Xinetd機制介紹 在Linux系統的早期版本中,有一種稱為inetd的網絡服務管理程序,也叫作“超級服務器”,就是監視一些網絡請求的守護進程,其根據網絡請求來調用相應的服務進程來處理連接請求。inetd.conf則是inetd的配置文件。inetd.conf文件告訴inetd監聽哪些網絡端口,為每個端口啟動哪個服務。在任何的網絡環境中使用Linux系統,第一件要做的事就是了解一下服務器到底要提供哪些服務。不需要的那些服務應該被禁止掉,這樣黑客就少了一些攻擊系統的機會,因為服務越多,意味著遭受攻擊的風險越打。用戶可以查看“/etc/inetd.conf”文件,了解一下inetd提供和開放了哪些服務,以根據實際情況進行相應的處理。而在Linux7.X的版本當中則使用xinetd(擴展的超級服務器)的概念對inetd進行了擴展和替代。因此本專題主要以xinetd為背景,來講述如何增加和刪除網絡服務,從而有效地保證Linux系統安全。 xinetd的默認配置文件是/etc/xinetd.conf。其語法和/etc/inetd.conf完全不同且不兼容。它本質上是/etc/inetd.conf和/etc/hosts.allow,/etc/hosts.deny功能的組合。 系統默認使用xinetd的服務可以分為如下幾類: l 標準internet服務:http、telnet、ftp等; l 信息服務:finger、netstat、systat; l 郵件服務:imap、pop3、smtp; l RPC服務:rquotad 、rstatd、rusersd、sprayd、walld; l BSD服務:comsat、exec、login、ntalk、shell talk; l 內部服務:chargen、daytime、echo等; l 安全服務:irc; l 其他服務:name、tftp、uucp、wu-ftp; 上述xinetd提供的服務的用途以及使用方法,用戶可以查找相關的資料獲得,這裏不再贅述。然而,對他們有詳細地了解是必不可少的,這可以幫助用戶較好地確定需要或者不需要哪些網絡服務功能。 下面是一個典型的/etc/xinetd.conf文件的例子: ``` # vi xinetd.conf # # Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d/ defaults { instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST cps = 25 30 } includedir /etc/xinetd.d 從文件最後一行可以清楚地看到,/etc/xinetd.d目錄是存放各項網絡服務(包括http、ftp等)的核心目錄,因而系統管理員需要對其中的配置文件進行熟悉和了解。 一般說來,在/etc/xinetd.d的各個網絡服務配置文件中,每一項具有下列形式: service service-name { Disabled //表明是否禁用該服務 Flags //可重用標誌 Socket_type //TCP/IP數據流的類型,包括stream,datagram,raw等 Wait //是否阻塞服務,即單線程或多線程 User //服務進程的uid Server //服務器守護進程的完整路徑 log_on_failure //登陸錯誤日誌記錄 } ``` 其中service是必需的關鍵字,且屬性表必須用大括號括起來。每一項都定義了由service-name定義的服務。 Service-name是任意的,但通常是標準網絡服務名,也可增加其他非標準的服務,只要它們能通過網絡請求激活,包括localhost自身發出的網絡請求。 每一個service有很多可以使用的attribute,操作符可以是=,+=,或-=。所有屬性可以使用=,其作用是分配一個或多個值,某些屬性可以使用+=或-=的形式,其作用分別是將其值增加到某個現存的值表中,或將其值從現存值表中刪除。 用戶應該特別註意的是:每一項用戶想新添加的網絡服務描述既可以追加到現有的/etc/xinetd.conf中,也可以在/etc/xinetd.conf中指定的目錄中分別建立單獨的文件,RedHat 7.x以上的版本都建議采用後一種做法,因為這樣做的可擴充性很好,管理起來也比較方便,用戶只需要添加相應服務的描述信息即可追加新的網絡服務。 RedHat 7.x默認的服務配置文件目錄是/etc/xinetd.d,在該目錄中使用如下命令可以看到許多系統提供的服務: ``` #cd /etc/xinetd.d #ls chargen cvspserver daytime-udp echo-udp ntalk qmail-pop3 rexec rsh sgi_fam telnet time-udp chargen-udp daytime echo finger pop3 qmail-smtp rlogin rsync talk time wu-ftpd 然而,上述的許多服務,默認都是關閉的,看看如下文件內容: #cat telnet # default: off //表明默認該服務是關閉的 # description: The telnet server serves telnet sessions; it uses # unencrypted username/password pairs for authentication. service telnet { disable = yes //表明默認該服務是關閉的 flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID } ``` 服務的開啟與關閉 一般說來,用戶可以使用兩種辦法來對網絡服務進行開啟與關閉。一種為通過文件直接編寫進行開啟與關閉;另外一種則通過用戶熟悉的圖形用戶界面進行。下面分別進行介紹。 (1)使用/etc/xinetd.d目錄下的文件進行配置 針對上面列出的關於telnet的例子,用戶想要開啟服務,只需要通過使用vi 編輯器改寫該文件為如下內容: ``` service telnet { disable = no //將該域置為“no”,則表明開啟該服務 flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID } ``` 然後,需要使用/etc/rc.d/init.d/xinetd restart來激活Telnet服務即可。 相對應的,如果用戶想要關閉某個不需要的服務,則將上述的disable = no改為disable = yes即可,這樣就修改了服務配置,並且再次使用/etc/rc.d/init.d/xinetd restart來啟用最新的配置。 這種方法使用起來相對於Windows下的圖形配置方法較為復雜,用戶需要對其中的每個參數都有清楚地了解,不能夠隨意修改,所以建議高級用戶或者是有經驗的用戶使用。 (2)使用圖形用戶界面進行配置: 用戶可以在終端下鍵入“setup”命令來對系統提供的服務、防火墻配置、用戶授權配置、網絡配置、聲卡配置、打印機配置等進行全方位的配置,如圖1所示。 圖1 配置工具示意圖 用戶選擇其中的System services進行配置即可,將會看到如圖2所示的用戶界面: 圖2 系統服務配置示意圖 用戶將會看到系統羅列出了anacron,apmd,autofs,chargen,telnet,http等包括我們上面所講述的xinetd管理的網絡服務在內的系統服務進程,用戶通過選擇這些進程,則可以開啟相應的服務。而如果用戶想關掉其中的某個服務,則取消選擇,保存退出即可以完成配置。 而用戶這樣設置的結果,就相當於直接對/etc/xinetd.d相應網絡服務的配置文件進行了改寫,只不過使用起來更加直觀和方便,且不需要用戶具有比較熟練的Linux使用技巧。 同樣需要註意的是,在配置好了相應的網絡服務之後,需要執行/etc/rc.d/init.d/xinetd restart命令來對新的改動進行激活,那麽就能夠使用最新配置的服務了。 最後強調用戶註意的是,本文給出的使用方法使用效率的高低、正確與否,極大程度上取決於具體的應用,以及用戶對各項服務理解程度的不同。希望用戶在配置自己的Linux服務器之前,對各種應用服務都作深入地了解,待到根據實際的應用需求確定好需要開啟和哪些網絡服務之後再使用xinetd機制進行配置,切忌稀裏糊塗地進行配置,反而導致產生較大的漏洞和風險。 3. systemd自定義啟動腳本 http://www.jb51.net/article/100457.htm systemd添加自定義系統服務設置自定義開機啟動的方法 投稿:jingxian 字體:[增加 減小] 類型:轉載 時間:2016-12-19 我要評論 下面小編就為大家帶來一篇systemd添加自定義系統服務設置自定義開機啟動的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 . . 1.服務權限 systemd有系統和用戶區分;系統(/user/lib/systemd/system/)、用戶(/etc/lib/systemd/user/).一般系統管理員手工創建的單元文件建議存放在/etc/systemd/system/目錄下面。 2.創建服務文件 ``` ? 12345678910111213141516 [Unit]Description=nginx - high performance web serverDocumentation=http://nginx.org/en/docs/After=network.target remote-fs.target nss-lookup.target [Service]Type=forkingPIDFile=/run/nginx.pidExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.confExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.confExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true [Install]WantedBy=multi-user.target [Unit] ``` Description : 服務的簡單描述 Documentation : 服務文檔 Before、After:定義啟動順序。Before=xxx.service,代表本服務在xxx.service啟動之前啟動。After=xxx.service,代表本服務在xxx.service之後啟動。 Requires:這個單元啟動了,它需要的單元也會被啟動;它需要的單元被停止了,這個單元也停止了。 Wants:推薦使用。這個單元啟動了,它需要的單元也會被啟動;它需要的單元被停止了,對本單元沒有影響。 [Service] Type=simple(默認值):systemd認為該服務將立即啟動。服務進程不會fork。如果該服務要啟動其他服務,不要使用此類型啟動,除非該服務是socket激活型。 Type=forking:systemd認為當該服務進程fork,且父進程退出後服務啟動成功。對於常規的守護進程(daemon),除非你確定此啟動方式無法滿足需求,使用此類型啟動即可。使用此啟動類型應同時指定 PIDFile=,以便systemd能夠跟蹤服務的主進程。 Type=oneshot:這一選項適用於只執行一項任務、隨後立即退出的服務。可能需要同時設置 RemainAfterExit=yes 使得 systemd 在服務進程退出之後仍然認為服務處於激活狀態。 Type=notify:與 Type=simple 相同,但約定服務會在就緒後向 systemd 發送一個信號。這一通知的實現由 libsystemd-daemon.so 提供。 Type=dbus:若以此方式啟動,當指定的 BusName 出現在DBus系統總線上時,systemd認為服務就緒。 Type=idle: systemd會等待所有任務(Jobs)處理完成後,才開始執行idle類型的單元。除此之外,其他行為和Type=simple 類似。 PIDFile:pid文件路徑 ExecStart:指定啟動單元的命令或者腳本,ExecStartPre和ExecStartPost節指定在ExecStart之前或者之後用戶自定義執行的腳本。Type=oneshot允許指定多個希望順序執行的用戶自定義命令。 ExecReload:指定單元停止時執行的命令或者腳本。 ExecStop:指定單元停止時執行的命令或者腳本。 PrivateTmp:True表示給服務分配獨立的臨時空間 Restart:這個選項如果被允許,服務重啟的時候進程會退出,會通過systemctl命令執行清除並重啟的操作。 RemainAfterExit:如果設置這個選擇為真,服務會被認為是在激活狀態,即使所以的進程已經退出,默認的值為假,這個選項只有在Type=oneshot時需要被配置。 [Install] Alias:為單元提供一個空間分離的附加名字。 RequiredBy:單元被允許運行需要的一系列依賴單元,RequiredBy列表從Require獲得依賴信息。 WantBy:單元被允許運行需要的弱依賴性單元,Wantby從Want列表獲得依賴信息。 Also:指出和單元一起安裝或者被協助的單元。 DefaultInstance:實例單元的限制,這個選項指定如果單元被允許運行默認的實例。 3.重載服務 systemctl enable nginx.service 就會在/etc/systemd/system/multi-user.target.wants/目錄下新建一個/usr/lib/systemd/system/nginx.service 文件的鏈接。 4.操作服務 ``` ? 12345678910111213141516171819 #啟動服務$ sudo systemctl start nginx.service #查看日誌$ sudo journalctl -f -u nginx.service — Logs begin at 四 2015-06-25 17:32:20 CST. —6月 25 10:28:24 Leco.lan systemd[1]: Starting nginx – high performance web server… 6月 25 10:28:24 Leco.lan nginx[7976]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 6月 25 10:28:24 Leco.lan nginx[7976]: nginx: configuration file /etc/nginx/nginx.conf test is successful 6月 25 10:28:24 Leco.lan systemd[1]: Started nginx – high performance web server. #重啟$ sudo systemctl restart nginx.service #重載$ sudo systemctl reload nginx.service #停止$ sudo systemctl stop nginx.service ```
10.23 linux任務計劃cron10.24chkconfig工具10.25 systemd管理服務10.26 unit介紹 10.27 target介紹