內容:
進程相關概念(用戶空間、內核空間,進程、線程)
進程及系統相關工具(ps、top、pgrep、pidof、kill)
調整nice值(nice、renice)
作業管理(jobs、fg、bg、kill,&)
計劃任務(at、crontab)
一、進程相關概念
內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等
內核空間和用戶空間關系:
對計算機來說,其實只有CPU和內存,其中在某一時刻內存邏輯上分為兩部分(linux系統):用戶空間和內核空間,每一個用戶進程在內存的用戶空間進行運行,當用戶進程需要進行硬件資源的訪問和使用時
此時會通過系統調用到內核空間,因為只有內核才有權限進行硬件的訪問,此時未運行完的進程會暫時中止(保留現場),CPU進而處理內核相關請求,而中止的進程相關狀態信息保存在內核task struct(Linux內核存儲進程信息的數據結構格式),即相當于內核會建立一個的運行的
程序的數據庫,當內核硬件的請求CPU處理完畢,內核會根據記錄進程數據庫中讀取進程的狀態(恢復現場),從而知道程序運行到哪一步,進而繼續運行下去,而不需要重新運行進程
因為每個進程可以通過系統調用進入內核,因此,Linux內核空間由系統內的所有進程共享。
進程和線程的關系:
進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的并發性。進程和線程的區別在于:
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小于進程,使得多線程程序的并發性高。
另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執行部分可以同時執行。但操作系統并沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
進程是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以并發執行.
(1)進程創建:
init:第一個進程
父子關系
進程:都由其父進程創建,COW
fork(), clone()
任何一個進程都是init的子進程
[11:08 root@Centos6.8~]# pstree init─┬─S80cmd───curl ├─abrtd ├─acpid ├─atd ├─auditd───{auditd} ├─automount───4*[{automount}] ├─bonobo-activati───{bonobo-activat} ├─certmonger ├─clock-applet ├─console-kit-dae───63*[{console-kit-da}] ├─crond ├─cupsd ├─2*[dbus-daemon───{dbus-daemon}] ├─2*[dbus-launch] ├─devkit-power-da ├─dhclient ├─gconf-im-settin ├─gconfd-2 ├─gdm-binary─┬─gdm-simple-slav─┬─Xorg───2*[{Xorg}] │ │ ├─gdm-session-wor─┬─gnome-session─┬─abrt-applet │ │ │ │ ├─bluetooth-apple │ │ │ │ ├─evolution-alarm │ │ │ │ ├─gdu-notificatio │ │ │ │ ├─gnome-panel │ │ │ │ ├─gnome-power-man │ │ │ │ ├─gnome-volume-co │ │ │ │ ├─gpk-update-icon │ │ │ │ ├─metacity───{metacity} │ │ │ │ ├─nautilus │ │ │ │ ├─nm-applet │ │ │ │ ├─polkit-gnome-au │ │ │ │ ├─python │ │ │ │ ├─restorecond │ │ │ │ └─{gnome-session} │ │ │ └─{gdm-session-wo} │ │ └─{gdm-simple-sla} │ └─{gdm-binary} ├─gdm-user-switch ├─gnome-keyring-d───2*[{gnome-keyring-}] ├─gnome-screensav ├─gnome-settings-───{gnome-settings} ├─gnome-terminal─┬─bash │ ├─gnome-pty-helpe │ └─{gnome-terminal} ├─gnote ├─gvfs-afc-volume───{gvfs-afc-volum} ├─gvfs-fuse-daemo───3*[{gvfs-fuse-daem}] ├─gvfs-gdu-volume ├─gvfs-gphoto2-vo ├─gvfsd ├─gvfsd-burn ├─gvfsd-metadata ├─gvfsd-trash ├─hald─┬─hald-runner─┬─hald-addon-acpi │ │ ├─hald-addon-inpu │ │ └─hald-addon-stor │ └─{hald} ├─im-settings-dae ├─irqbalance ├─5*[mingetty] ├─notification-ar ├─pcscd───{pcscd} ├─polkitd ├─pulseaudio─┬─gconf-helper │ └─2*[{pulseaudio}] ├─rpc.statd ├─rpcbind ├─rsyslogd───3*[{rsyslogd}] ├─rtkit-daemon───2*[{rtkit-daemon}] ├─seahorse-daemon ├─sshd───sshd───bash───pstree ├─trashapplet ├─udevd───2*[udevd] ├─udisks-daemon─┬─udisks-daemon │ └─{udisks-daemon} └─wnck-applet
(2)進程狀態:
運行態:running【一個CPU一個時間只能運算一個進程,即同一時間只有一個進程是運行狀態】
就緒態:ready
睡眠態:進程所需要的資源沒有被正常獲取或者正在等待資源的獲取時,就會進入睡眠狀態
可中斷:interruptable(如ctrl+c能使進程中斷的就是可中斷的睡眠)
不可中斷:uninterruptable(在運行的過程中不能中斷,即不能kill)
停止態:stopped,暫停于內存中,但不會被調度,除非手動啟動
僵死態:zombie,結束進程,父進程結束前,子進程不關閉
(3進程優先級:
優先級高代表:
1、獲得更多的CPU時間
2、更優先獲得運行的機會
系統優先級:數字越小,優先級越高
0-139(CentOS4,5)
各有140個運行隊列和過期隊列
0-98,99(CenOS6)
實時優先級:99-0:值最大優先級最高
Nice值:-20,19對應系統優先級100-139或99
1、普通用戶只能調大自己進程的nice值
2、root可以調大調小nice
時間復雜度:Big O,用時和規模的關系(橫坐標可以是規?;蛘哧犃袛盗校v坐標是時間)
O(1):
O(logn),
O(n)線性,
O(n^2)拋物線,
O(2^n)
(4)進程編號:
PID:process ID
每一進程的PID都是唯一的,就算進程結束,一般其他程序都不會占用此號碼,所以會看到中間有些數字沒有連續,代表有些進程產生并且已經結束
任何一個進程都是init的子進程,所以init的PID永遠是1
/proc下每個文件夾名為數字的都代表一個進程的編號PID
[14:22 root@Centos6.8~]# ls /proc/ 1 14 1692 2 22 30 3758 3892 3935 4122 4785 64 cmdline irq mounts swaps 10 1426 17 20 2220 31 38 3894 3936 4124 4789 65 cpuinfo kallsyms mpt sys 11 1460 1700 2007 2231 32 3829 39 3941 4156 48 66 crypto kcore mtd sysrq-trigger 1123 1494 1727 2012 2239 33 3842 3904 3942 4163 49 7 devices keys mtrr sysvipc 1124 15 1745 2014 23 34 3847 3905 3945 4194 5 730 diskstats key-users net timer_list 1125 1512 18 2017 24 342 3854 3908 3946 4196 50 8 dma kmsg pagetypeinfo timer_stats 1126 1532 1881 2019 25 343 3856 3910 4 4197 51 9 driver kpagecount partitions tty 1173 1555 1894 2028 26 344 3857 3911 40 42 52 98 execdomains kpageflags sched_debug uptime 12 1599 19 2060 27 35 3862 3912 4008 43 53 99 fb loadavg schedstat version 13 16 1935 2064 28 36 3866 3915 41 444 548 acpi filesystems locks scsi vmallocinfo 132 1632 1949 2087 280 37 3880 3918 4110 445 6 asound fs mdstat self vmstat 13524 1644 1964 21 281 3723 3882 3921 4112 46 60 buddyinfo interrupts meminfo slabinfo zoneinfo 13615 1645 1980 2159 29 3747 3887 3927 4117 47 61 bus iomem misc softirqs 13616 1691 1991 2167 3 3755 3890 3933 4120 4718 62 cgroups ioports modules stat
二、進程常用工具命令:
1、ps:process state
語法:ps [options]
注意:該命令查看的是某一時刻的瞬間進程運行的狀態,非連續查看
支持三種選項:
UNIX選項如-a(選項前加-)
BSD選項如a
?默認顯示當前終端中的進程
?a選項包括所有終端中的進程
?x選項包括不連接終端的進程(TTY的狀態為?的進程)
?u選項顯示進程所有者的信息
?f選項顯示進程的父進程
?o屬性… 選項顯示定制的信息:
?pid、comm、%cpu、%mem、state、tty、euser、ruser
[14:38 root@Centos6.8/proc/10]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 19352 1548 ? Ss 08:46 0:02 /sbin/init root 2 0.0 0.0 0 0 ? S 08:46 0:00 [kthreadd] root 2007 0.0 0.0 4064 544 tty2 Ss+ 08:48 0:00 /sbin/mingetty /dev/tty2 root 2012 0.0 0.0 4064 540 tty3 Ss+ 08:48 0:00 /sbin/mingetty /dev/tty3 root 2014 0.0 0.0 4064 544 tty4 Ss+ 08:48 0:00 /sbin/mingetty /dev/tty4 root 2017 0.0 0.0 4064 540 tty5 Ss+ 08:48 0:00 /sbin/mingetty /dev/tty5 root 2019 0.0 0.0 4064 544 tty6 Ss+ 08:48 0:00 /sbin/mingetty /dev/tty6 root 2028 0.0 0.1 12640 2876 ? S< 08:48 0:00 /sbin/udevd -d root 2060 0.0 0.1 164924 3564 ? Sl 08:48 0:00 /usr/libexec/gdm-simple-slave --display-id /org/gnome/DisplayManager root 2064 0.0 1.5 196384 29084 tty1 Ssl+ 08:48 0:04 /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-g root 2087 0.0 0.1 1036464 3360 ? Sl 08:48 0:00 /usr/sbin/console-kit-daemon --no-daemon gdm 2159 0.0 0.0 20044 696 ? S 08:48 0:00 /usr/bin/dbus-launch --exit-with-session
USER:發起進程的用戶 PID:PID號 %CPU:使用CPU百分比 %MEM:使用內存百分比 VSZ:Virtual memory SiZe,虛擬內存集,線性內存 RSS:ReSidentSize, 常駐內存集 TTY:和終端相關 STAT:進程狀態 D:不可中斷睡眠 S:可中斷的睡眠 R:就緒或運行狀態 T:中止狀態 Z:僵死狀態 <:高優先級進程 N:低優先級進程 +:前臺進程組中的進程 l:多線程的進程 s:會話進程的首進程 START:進程開始時間 TIME:進程真正在CPU運行的時間,而非掛表時長 COMMANDD:發起進程的命令,【如果命令中有中括號,代表是內核進程】
2、top:可查看動態的進程情況
top - 16:02:39 up 7:15, 3 users, load average: 0.15, 0.25, 0.39 Tasks: 163 total, 1 running, 162 sleeping, 0 stopped, 0 zombie Cpu(s): 0.2%us, 0.7%sy, 0.0%ni, 99.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1907300k total, 683656k used, 1223644k free, 81328k buffers Swap: 4095996k total, 0k used, 4095996k free, 249180k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3 root RT 0 0 0 0 S 0.3 0.0 0:00.69 migration/0 1894 root 20 0 105m 972 580 S 0.3 0.1 0:08.28 S80cmd 3910 root 20 0 227m 2052 1704 S 0.3 0.1 0:01.80 gvfs-afc-volume 17909 root 20 0 15032 1264 936 R 0.3 0.1 0:00.12 top 1 root 20 0 19352 1548 1232 S 0.0 0.1 0:02.02 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd 4 root 20 0 0 0 0 S 0.0 0.0 0:00.08 ksoftirqd/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
[16:03 root@Centos6.8/proc/10]# uptime 16:03:38 up 7:16, 3 users, load average: 0.25, 0.25, 0.38
top命令說明: 第一行:是uptime信息,其中load average:N,M,K:N,M,K代表過去1,5,15分鐘CPU負載情況, 如果這個數除以CPU的數目,結果高于5的時候就表明系統在超負荷運轉了,正常應該控制在小于1的范圍內,通常我們先看15分鐘load,如果load很高,再看1分鐘和5分鐘負載,查看是否有下降趨勢。 第三行:CPU的運算占用比 us(user):用戶空間的進程 sy(system):內核空間 ni(nice):調整nice的時間 id(idle):空閑 wa(wait):等待IO時間 hi(hardinterrupt):硬中斷 si(softinterrupt):軟中斷 st(stool):虛擬機偷走的時間 第四行:物理內存使用情況 第五行:虛擬內存使用情況
交互命令:
M: 根據駐留內存大小進行排序
P:根據CPU使用百分比進行排序
T: 根據累計時間進行排序
l: 是否顯示平均負載和啟動時間
t: 是否顯示進程和CPU狀態相關信息
m: 是否顯示內存相關信息
c: 是否顯示完整的命令行信息
q: 退出top
k: 終止某個進程
3、進程搜索:pgrep、pidof
pgrep:查找摸個進程的ID號
pgrep[options] patter
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示父進程為此處指定的進程的進程列表
[15:34 root@Centos6.8/proc/10]# pgrep -u root ssh 1881 4785
pidof:根據程序名查找相關的PID
pidof [-s] [-c] [-x] [-m] [-o omitpid] [-o omitpid..] program [program..]
[15:37 root@Centos6.8/proc/10]# pidof bash 4197
4、kill
kill:向進程發送控制信號,以實現對進程管理
顯示當前系統可用信號:kill -l
常用信號:man 7 signal
1) SIGHUP: 無須關閉進程而讓其重讀配置文件
2) SIGINT: 中止正在運行的進程;相當于Ctrl+c
9) SIGKILL: 殺死正在運行的進程(強制立刻殺死進程)
15) SIGTERM:終止正在運行的進程(可能不會立即生效,會等進程保存完所有數據才正常退出)
18) SIGCONT:
19) SIGSTOP:
指定信號的方法:
(1) 信號的數字標識;1, 2, 9
(2) 信號完整名稱;SIGHUP
(3) 信號的簡寫名稱;HUP
[17:03 root@Centos6.8/proc/10]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL10) SIGUSR1 11) SIGSEGV12) SIGUSR213) SIGPIPE14) SIGALRM15) SIGTERM 16) SIGSTKFLT17) SIGCHLD18) SIGCONT19) SIGSTOP20) SIGTSTP 21) SIGTTIN22) SIGTTOU23) SIGURG24) SIGXCPU25) SIGXFSZ 26) SIGVTALRM27) SIGPROF28) SIGWINCH29) SIGIO30) SIGPWR 31) SIGSYS34) SIGRTMIN35) SIGRTMIN+136) SIGRTMIN+237) SIGRTMIN+3 38) SIGRTMIN+439) SIGRTMIN+540) SIGRTMIN+641) SIGRTMIN+742) SIGRTMIN+8 43) SIGRTMIN+944) SIGRTMIN+1045) SIGRTMIN+1146) SIGRTMIN+1247) SIGRTMIN+13 48) SIGRTMIN+1449) SIGRTMIN+1550) SIGRTMAX-1451) SIGRTMAX-1352) SIGRTMAX-12 53) SIGRTMAX-1154) SIGRTMAX-1055) SIGRTMAX-956) SIGRTMAX-857) SIGRTMAX-7 58) SIGRTMAX-659) SIGRTMAX-560) SIGRTMAX-461) SIGRTMAX-362) SIGRTMAX-2 63) SIGRTMAX-164) SIGRTMAX
5、killall:kill單次只能殺死一個進程PID,當一個服務開啟多個進程,而要結束該服務時,可使用killall殺死該服務即可
killall:kill processes by name
kill [options] name
三、調整nice優先級
nice:-20到19,值越小優先級越高
1、調整已經啟動的進程nice值
renice NI PID
[17:28 root@Centos6.8/proc/10]# pgrep bash 4197 4789 [17:28 root@Centos6.8/proc/10]# renice 3 4789 4789: old priority 0, new priority 3 [17:28 root@Centos6.8/proc/10]# renice -3 4789 4789: old priority 3, new priority -3
2、調整未啟動的進程nice優先級:
nice -n NI COMMAND
[17:32 root@Centos6.8/proc/10]# nice -n -3 date Tue Sep 6 17:32:09 CST 2016
四、作業管理
(1)Linux的作業控制
前臺作業:通過終端啟動,且啟動后一直占據終端;
后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端)
?如何讓作業運行于后臺?
(1) 運行中的作業:Ctrl+z(進程會處于暫停狀態)
(2) 尚未啟動的作業:COMMAND &
?此類后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業.
查看所有作業:
jobs:作業號不是進程號
+:命令將默認操作的作業
—:命令將第二個默認操作的作業
[18:37 root@Centos6.8/proc/10]# ping 10.1.0.1 PING 10.1.0.1 (10.1.0.1) 56(84) bytes of data. 64 bytes from 10.1.0.1: icmp_seq=1 ttl=64 time=0.477 ms ^Z [1]+ Stopped ping 10.1.0.1
(2)作業控制:
fg %JOB_NUM:把指定的后臺作業調回前臺;
bg %JOB_NUM:讓送往后臺的作業在后臺繼續運行;
kill %JOB_NUM:終止指定的作業;
[18:32 root@Centos6.8/proc/10]# ping 10.1.0.1 PING 10.1.0.1 (10.1.0.1) 56(84) bytes of data. 64 bytes from 10.1.0.1: icmp_seq=1 ttl=64 time=0.365 ms 64 bytes from 10.1.0.1: icmp_seq=2 ttl=64 time=0.731 ms ^Z [1]+ Stopped ping 10.1.0.1 [18:33 root@Centos6.8/proc/10]# fg %1 ping 10.1.0.1 64 bytes from 10.1.0.1: icmp_seq=3 ttl=64 time=0.972 ms 64 bytes from 10.1.0.1: icmp_seq=4 ttl=64 time=1.96 ms 64 bytes from 10.1.0.1: icmp_seq=5 ttl=64 time=1.73 ms 64 bytes from 10.1.0.1: icmp_seq=6 ttl=64 time=1.08 ms ^Z [1]+ Stopped ping 10.1.0.1 [18:34 root@Centos6.8/proc/10]# jobs [1]+ Stopped ping 10.1.0.1 [18:34 root@Centos6.8/proc/10]# kill %1 [1]+ Stopped ping 10.1.0.1
(3)程序并行運行
1、使用腳本,每個子命令后加&
vi 4.sh
1.sh&
2.sh&
3.sh&
[18:58 root@Centos6.8~]# paste -d% 1.sh 2.sh 3.sh #!/bin/bash%#!/bin/bash%#!/bin/bash while true%while true%while true do%do%do echo "1"%echo "2"%echo "3" sleep 1%sleep 2%sleep 3 done%done%done [18:58 root@Centos6.8~]# 3 2 1 1 2 1 3 1 2 1 1 3 2 1
? 2、使用小括號
( (f1.sh&);(f2.sh&);(f3.sh&)) [19:00 root@Centos6.8~]# ((/root/1.sh&);(/root/2.sh&);(/root/3.sh&)) [19:00 root@Centos6.8~]# 1 2 3 1 2 1 3 1 2 1
? 3、使用大括號
{ f1.sh& f2.sh& f3.sh& }
五、計劃任務
1、在未來的某個時間點執行一次某任務;
at
at 時間
at> COMMAND
at> Ctrl+d(提交命令)
指定時間:
絕對時間:HH:MM, DD.MM.YY MM/DD/YY
相對時間:now+#
單位:minutes, hours, days, weeks
模糊時間:noon, midnight, teatime
常用選項:
-q QUEUE:
-l: 列出指定隊列中等待運行的作業;相當于atq
-d JOB_ID: 刪除指定的作業;相當于atrm
-c: 查看具體作業任務
-f /path/from/somefile:從指定的文件中讀取任務
-m:強制at發送郵件,表示執行完畢
注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶
at允許或禁止某用戶的配置文件:
/etc/at.deny,/etc/at.allow
其中,如果只有/etc/at.deny,表示出了deny名單外的人都可以使用at,默認deny名單為空,表示所有人都可以使用
如果只有/etc/at.allow,表示只有名單的用戶才能使用at
如果兩個文件都存在,一般來說只有allow生效
如果兩個文件都沒有,則表示只有root才能使用at
2、周期性地執行某任務;
cron:自身是一個不間斷運行的服務,注意,當因關機等意外情況而是任務超時沒有執行,恢復服務后,默認也不會再回頭執行過時的任務
anacron: cron的補充,能夠實現讓cron因為各種原因在過去的時間該執行而未執行的任務在恢復正常執行一次;
注意,使用cron時先要查看系統的crond服務是否已經啟動:
[19:42 root@Centos6.8~]# service crond status crond (pid 1949) is running...
cron:
(1)系統cron任務:
/etc/crontab
分鐘 小時 天 月 周 用戶 任務
用戶cron任務:
/var/spool/cron/USERNAME
分鐘 小時 天 月 周 任務
# 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
(2)時間的有效取值:
分鐘:0-59
小時:0-23
天:1-31
月:1-12
周:0-7,0和7都表示周日
(3)時間通配表示:
*: 對應時間的所有有效取值
3 * * * * :每小時的第三分鐘
3 * * * 7:每周天的每小時的第三分鐘
13 12 6 7 *:每年7月的6號的12點13分鐘
,: 離散時間點:
10,40 02 * * 2,5 :每周二凌晨2點10分、2點40分和每周五凌晨2點10分、2點40分
-:連續時間點:
10 02 * * 1-5:周一到周五的凌晨2點10分
/#: 對應取值范圍內每多久一次,#代表頻率
*/3 * * * *:每3分鐘
每兩小時執行一次:一定要在比小時更小的單位給一個具體數值
08 */2 * * *
每兩天執行一次:一定要在比天更小的單位給一個具體數值
10 04 */2 * *
(4)執行結果將以郵件形式發送給管理員:
*/3 * * * * /bin/cat /etc/fstab &> /dev/null
(5)注意:
1)cron的環境變量:cron執行所有命令都去PATH環境變量指定的路徑下去找,所以為避免某些命令不再PATH變量中,建議命令使用絕對路徑表示
cron默認搜索的PATH /bin:/sbin:/usr/bin:/usr/sbin
如果運行的是腳本,要注意在腳本的開頭先聲明PATH:export PATH=
2)對于cron任務來講,%有特殊用途;如果在命令中要使用%,則需要轉義;不過,如果把%放置于單引號中,也可以不用轉義
用戶任務的管理:
crontab
-l: 列出當前用戶的所有cron任務
-e: 編輯創建周期任務
-r: 移除所有任務
-u USERNAME: 管理其用戶的cron任務
eg. crontab -eu USERNAME
原創文章,作者:麥德良,如若轉載,請注明出處:http://www.www58058.com/44140