當前位置:首頁 » 網頁前端 » linux定時腳本
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

linux定時腳本

發布時間: 2022-02-13 05:55:56

❶ linux下編寫一個shell腳本 每天0點 定時執行某一可執行程序test。 剛學習shell希望大俠們給個代碼參考!

概述

linux用到定時任務需要crontab的幫助

首先終端鍵入:crontab -e

root@sys #:crontab -e

然後進行編輯,這里操作和vim操作一至

假設,我需要定時每秒訪問一次指定網頁,訪問網頁的腳本已經寫好了,叫view.sh,放在了/user目錄下,那麼定時腳本將需要這么些。

*/1 * * * * /bin/sh /user/view.sh

解析

crontab [-u username] [-l|-e|-r]

參數:

-u: 只有root才能進行這個任務,也即幫其他用戶新建/刪除crontab工作調度;

-e: 編輯crontab 的工作內容;

-l: 查閱crontab的工作內容;

-r: 刪除所有的crontab的工作內容,若僅要刪除一項,請用-e去編輯。

crontab -e 進入編輯模式 #此時會進入vi的編輯界面讓你編輯工作。注意到,每項工作都是一行。

*/1 * * * * /bin/sh /user/view.sh
#分 時 日 月 周 |=========命令行===|

代表意義 分鍾 小時 日期 月份 周 命令

數字范圍 0~59 0~23 1~31 1~12 0~7 就命令啊

特殊字元 - 代表意義

*(星號) --- 代表任何時刻都接受的意思。舉例來說,範例一內那個日、月、周都是*,就代表著不論何月、何日的禮拜幾的12:00都執行後續命令的意思。

,(逗號) --- 代表分隔時段的意思。舉例來說,如果要執行的工作是3:00與6:00時,就會是:

0 3,6 * * * command

時間還是有五列,不過第二列是 3,6 ,代表3與6都適用

-(減號) --- 代表一段時間范圍內,舉例來說,8點到12點之間的每小時的20分都進行一項工作:

20 8-12 * * * command

仔細看到第二列變成8-12.代表 8,9,10,11,12 都適用的意思

/n(斜線) --- 那個n代表數字,即是每隔n單位間隔的意思,例如每五分鍾進行一次,則:

*/5 * * * * command

用*與/5來搭配,也可以寫成0-59/5,意思相同

拓展內容

linux

Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟體、應用程序和網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。

Linux操作系統誕生於1991 年10 月5 日(這是第一次正式向外公布時間)。Linux存在著許多不同的Linux版本,但它們都使用了Linux內核。Linux可安裝在各種計算機硬體設備中,比如手機、平板電腦、路由器、視頻游戲控制台、台式計算機、大型機和超級計算機。

嚴格來講,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基於Linux內核,並且使用GNU工程各種工具和資料庫的操作系統。

❷ linux 腳本編程 定時關閉和打開程序

1、利用crontab 制定定時任務

2、編寫定時關閉和打開程序的腳本或命令
3、crontab的用法
第1列分鍾1~59
第2列小時1~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~6(0表示星期天)
第6列要運行的命令
下面是crontab的格式:
分 時 日 月 星期 要運行的命令或腳本

30 21 * * * /usr/local/apache/bin/apachectl restart
上面的例子表示每晚的21:30重啟apache

❸ linux定時執行任務的shell腳本

linux下使用crontab命令被用來提交和管理用戶的需要周期性執行的任務,示例如下:
crontab -e 編輯周期任務

30 21 * * * /etc/init.d/smb restart 每晚的21:30重啟smb

crontab命令說明:
crontab命令被用來提交和管理用戶的需要周期性執行的任務,與windows下的計劃任務類似,當安裝完成操作系統後,默認會安裝此服務工具,並且會自動啟動crond進程,crond進程每分鍾會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。

語法
crontab(選項)(參數)
選項
-e:編輯該用戶的計時器設置;
-l:列出該用戶的計時器設置;
-r:刪除該用戶的計時器設置;
-u<用戶名稱>:指定要設定計時器的用戶名稱。
參數
crontab文件:指定包含待執行任務的crontab文件。

知識擴展
Linux下的任務調度分為兩類:系統任務調度和用戶任務調度。
系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬碟、日誌清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。

crontab文件的含義:
用戶所建立的crontab文件中,每一行都代表一項任務,每行的每個欄位代表一項設置,它的格式共分為六個欄位,前五段是時間設定段,第六段是要執行的命令段,格式如下:
minute hour day month week command 順序:分 時 日 月 周
其中:
minute: 表示分鍾,可以是從0到59之間的任何整數。
hour:表示小時,可以是從0到23之間的任何整數。
day:表示日期,可以是從1到31之間的任何整數。
month:表示月份,可以是從1到12之間的任何整數。
week:表示星期幾,可以是從0到7之間的任何整數,這里的0或7代表星期日。
command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件。
在以上各個欄位中,還可以使用以下特殊字元:

星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。
逗號(,):可以用逗號隔開的值指定一個列表范圍,例如,「1,2,5,7,8,9」
中杠(-):可以用整數之間的中杠表示一個整數范圍,例如「2-6」表示「2,3,4,5,6」
正斜線(/):可以用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鍾執行一次。

❹ 在linux下怎麼讓一個腳本定時運行

Linux中,周期執行的任務一般由cron這個守護進程來處理 ps -ef | grep cron
cron讀取一個或多個配置文件,這些配置文件中包含了命令行及其調用時間。
cron的配置文件稱為「crontab」,是「cron table」的簡寫。

❺ linux中怎麼讓一個shell腳本分別在凌晨00點和中午12點運行一次

創建一個新的crontab文件

向cron進程提交一個crontab文件之前,首先要設置環境變數EDITOR。編輯$HOME目錄下的. profile文件,在其中加入這樣一行:

EDITOR=vi;exportEDITOR

然後保存並退出。創建一個名為testcron的文件,內容如下:

#runtest.sheveryhalfday
*0,12***/home/username/test.sh

保存並退出。然後提交這個任務:

$ crontab testcron

❻ linux中如何寫個腳本讓系統自動定時記錄cup和內存使用率

#! /bin/bash

echo -n "PidName " > /root/script/pid.f
echo
"MeMery " >> /root/script/pid.f

PIDPATH=/proc/
TOTLE=0
cd
$PIDPATH
DOC=`ls`
for DOCNAME in $DOC
do
if [ -d
$DOCNAME ]; then
cd $DOCNAME
if [ -f status
];then
MEMERY=`grep VmRSS status | awk -F':' '{print $2}' | awk
'{print $1}'`
PIDNAME=`grep Name status | awk -F':' '{print
$2}'`
if [ $MEMERY ]; then
echo -n $PIDNAME
>> /root/script/pid.f
echo -n " " >>
/root/script/pid.f
echo $MEMERY >>
/root/script/pid.f
TOTLE=`expr $TOTLE +
$MEMERY`
cd ..
else
cd
..
fi
else
cd
..
fi
fi
done
TOTLE=`expr $TOTLE /
1024`
echo "TOTLE USERD: $TOTLE MB" >> /root/script/pid.f
cat
/root/script/pid.f

❼ 怎麼在linux腳本中添加定時任務

計劃任務 crontab
root@ubuntu:~# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

❽ linux 定時腳本 / 是什麼意思

就是把腳本寫入計劃任務,按照要求的時間執行腳本

❾ linux 在screen下定時執行腳本

首先查看一下/etc/crontab文件:

$ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

前四行是有關設置cron任務運行的環境變數。SHELL變數的值指定系統使用的SHELL環境(該樣例為bash shell),PATH變數定義了執行命令的路徑。Cron的輸出以電子郵件的形式發給MAILTO變數定義的用戶名。如果MAILTO變數定義為空字元串(MAILTO=""),電子郵件不會被發送。執行命令或腳本時HOME變數可用來設置基目錄。
文件/etc/crontab中每行任務的描述格式如下:

minute hour day month dayofweek command

minute - 從0到59的整數
hour - 從0到23的整數
day - 從1到31的整數 (必須是指定月份的有效日期)
month - 從1到12的整數 (或如Jan或Feb簡寫的月份)
dayofweek - 從0到7的整數,0或7用來描述周日 (或用Sun或Mon簡寫來表示)
command - 需要執行的命令(可用as ls /proc >> /tmp/proc或 執行自定義腳本的命令)

root表示以root用戶身份來運行
run-parts表示後面跟著的是一個文件夾,要執行的是該文件夾下的所有腳本

對於以上各語句,星號(*)表示所有可用的值。例如*在指代month時表示每月執行(需要符合其他限制條件)該命令。
整數間的連字型大小(-)表示整數列,例如1-4意思是整數1,2,3,4
指定數值由逗號分開。如:3,4,6,8表示這四個指定整數。
符號「/」指定步進設置。「/<interger>」表示步進值。如0-59/2定義每兩分鍾執行一次。步進值也可用星號表示。如*/3用來運行每三個月份運行指定任務。

以「#」開頭的為注釋行,不會被執行。

如果一個cron任務需要定期而不是按小時,天,周,月來執行,則需要添加/etc/cron.d目錄。這個目錄下的所有文件和文件/etc/crontab語法相同,查看樣例:

# record the memory usage of the system every monday
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom scrīpt the first day of every month at 4:10AM
10 4 1 * * /root/scrīpts/backup.sh

除了root用戶之外的用戶可以執行crontab配置計劃任務。所有用戶定義的crontab存儲在目錄/var/spool/cron下,任務會以創建者的身份被執行。要以特定用戶創建一個crontab,先以該用戶登錄,執行命令crontab -e,系統會啟動在VISUAL或者EDITOR中指定的的編輯軟體編輯crontab。文件內容與/etc/crontab格式相同。示例如下:

0 3 * * * /home/dbbackup/db1backup.sh backup
0 4 * * * /home/dbbackup/db2backup.sh backup

表示每天3點執行/home/dbbackup/db1backup.sh backup,4點執行/home/dbbackup/db2backup.sh backup,如果是每五分鍾執行一次可改為:

*/5 * * * * /home/dbbackup/db2backup.sh backup

當更改的crontab需要保存時,文件會保存在成如下文件/var/spool/cron/username。文件名會根據用戶名而不同。

cron服務會每分鍾檢查一次/etc/crontab、/etc/cron.d/、/var/spool/cron文件下的變更。如果發現變化,就會下載到存儲器中。因此,即使crontab文件改變了,程序也不需要重新啟動。推薦自定義的任務使用crontab -e命令添加,退出後用/etc/init.d/crond restart命令重啟crond進程,官方文件說不用重啟進程,但我遇到不重啟無法運行任務的情況。開始不知道/etc/crontab文件中的run-parts是什麼意思,直接把命令按照/etc/crontab的格式加上總是無法運行,後來才知道run-parts是指後面跟著的是文件夾。

❿ 在linux下怎麼讓一個腳本定時運行

Linux中,周期執行的任務一般由cron這個守護進程來處理 ps -ef | grep cron
cron讀取一個或多個配置文件,這些配置文件中包含了命令行及其調用時間。
cron的配置文件稱為「crontab」,是「cron table」的簡寫。

一、 cron在3個地方查找配置文件(設置shell腳本):

1、/var/spool/cron/yanggang 這個目錄下存放的是每個用戶(包括root)的crontab任務,每個任務以創建者的名字命名,比如用戶tom建的crontab任務對應的文件就是/var/spool/cron/tom
yanggang@barry$ sudo ls -l /var/spool/cron/(或有時是 /var/spool/cron/crontabs/)
-rw------- 1 root crontab 1071 2011-09-19 17:20 root
-rw------- 1 yanggang crontab 1176 2011-09-24 11:07 yanggang

一般一個用戶最多隻有一個crontab文件(如:root, yanggang等),其對應日誌在/var/spool/mail/root(或/var/spool/mail/yanggang)文件里

2、/etc/crontab 這個文件負責安排由系統管理員制定的維護系統以及其他任務的crontab。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# .---------------- 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
# | | | | |
# * * * * * command to be executed

例如:

*/5 * * * * root /usr/libexec/atrun
minute:代表一小時內的第幾分,范圍 0-59。
hour:代表一天中的第幾小時,范圍 0-23。
mday:代表一個月中的第幾天,范圍 1-31。
month:代表一年中第幾個月,范圍 1-12。
wday:代表星期幾,范圍 0-7 (0及7都是星期天)。
who:要使用什麼身份執行該指令,當您使用 crontab -e 時,不必加此欄位。
command:所要執行的指令。

3、/etc/cron.d/ 這個目錄用來存放任何要執行的crontab文件或腳本。

二、 許可權
crontab許可權問題到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
用法如下:
1、如果兩個文件都不存在,則只有root用戶才能使用crontab命令。
2、如果cron.allow存在但cron.deny不存在,則只有列在cron.allow文件里的用戶才能使用crontab命令,如果root用戶也不在裡面,則root用戶也不能使用crontab。
3、如果cron.allow不存在, cron.deny存在,則只有列在cron.deny文件裡面的用戶不能使用crontab命令,其它用戶都能使用。
4、如果兩個文件都存在,則列在cron.allow文件中而且沒有列在cron.deny中的用戶可以使用crontab,如果兩個文件中都有同一個用戶,
以cron.allow文件裡面是否有該用戶為准,如果cron.allow中有該用戶,則可以使用crontab命令。

AIX 中 普通用戶默認都有 crontab 許可權,如果要限制用戶使用 crontab ,就需要編輯/var/adm/cron/cron.deny
HP-UNIX 中默認普通用戶沒得crontab 許可權 ,要想放開普通用戶的crontab 許可權可以編

三、 創建cron腳本
第一步:寫cron腳本文件,命名為crontest.cron。
15,30,45,59 * * * * echo "xgmtest....." >> xgmtest.txt 表示,每隔15分鍾,執行列印一次命令
第二步:添加定時任務。執行命令 「crontab crontest.cron」。搞定
第三步:"crontab -l" 查看定時任務是否成功或者檢測/var/spool/cron下是否生成對應cron腳本

四、 cron服務
cron是一個linux下 的定時執行工具,可以在無需人工干預的情況下運行作業。
/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置
/sbin/service crond status //查看服務狀態

例如: 使用sudo停止與啟動服務
yanggang@barry$sudo service cron stop
cron stop/waiting
yanggang@barry$ sudo service cron start
cron start/running, process 7502

五、 crontab用法
crontab命令用於安裝、刪除或者列出用於驅動cron後台進程的表格,用戶把需要執行的命令序列放到crontab文件中以獲得執行。
每個用戶都可以有自己的crontab文件,/var/spool/cron下的crontab文件不可以直接創建或者直接修改,該crontab文件是通過crontab -e命令創建的

在crontab文件中如何輸入需要執行的命令和時間,該文件中每行都包括六個域,其中前五個域是指定命令被執行的時間,最後一個域是要被執行的命令。
每個域之間使用空格或者製表符分隔。格式如下:
minute hour day-of-month month-of-year day-of-week commands
合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday)

除了數字還有幾個個特殊的符號就是"*"、"/"與"-"、",",*代表所有的取值范圍內的數字
"/"代表每的意思,"/5"表示每5個單位,"-"代表從某個數字到某個數字,","分開幾個離散的數字。
-l 在標准輸出上顯示當前的crontab。
-r 刪除當前的crontab文件。

-e 使用VISUAL或者EDITOR環境變數所指的編輯器編輯當前的crontab文件。
當結束編輯離開時,編輯後的文件將自動安裝。

幾個例子:
每天早上6點
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出,因為cron把任何輸出都email到root的信箱了。

每兩個小時
0 */2 * * * echo "Have a break now." >> /tmp/test.txt

晚上11點到早上8點之間每兩個小時和早上八點
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt

每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點
0 11 4 * 1-3 command line

1月1日早上4點
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號 HOME=/

每小時(第一分鍾)執行/etc/cron.hourly內的腳本
01 * * * * root run-parts /etc/cron.hourly

每天(凌晨4:02)執行/etc/cron.daily內的腳本
02 4 * * * root run-parts /etc/cron.daily

每星期(周日凌晨4:22)執行/etc/cron.weekly內的腳本
22 4 * * 0 root run-parts /etc/cron.weekly

每月(1號凌晨4:42)去執行/etc/cron.monthly內的腳本
42 4 1 * * root run-parts /etc/cron.monthly

注意: "run-parts"這個參數了,如果去掉這個參數的話,後面就可以寫要運行的某個腳本名,而不是文件夾名。

每天的下午4點、5點、6點的5 min、15 min、25 min、35 min、45 min、55 min時執行命令。
5,15,25,35,45,55 16,17,18 * * * command

每周一,三,五的下午3:00系統進入維護狀態,重新啟動系統。
00 15 * *1,3,5 shutdown -r +5

每小時的10分,40分執行用戶目錄下的innd/bbslin這個指令:
10,40 * * * * innd/bbslink

每小時的1分執行用戶目錄下的bin/account這個指令:
1 * * * * bin/account

每天早晨三點二十分執行用戶目錄下如下所示的兩個指令(每個指令以;分隔):
203 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)

每年的一月和四月,4號到9號的3點12分和3點55分執行/bin/rm -f expire.1st這個指令,並把結果添加在mm.txt這個文件之後(mm.txt文件位於用戶自己的目錄位置)。

12,553 4-91,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt

六、幾個問題
crond 進程沒有運行
1. 啟動crond進程
/etc/init.d/crond start

2. 開機自啟動crond進程
chkconfig crond on

crontab 編輯:
輸入編輯命令: crontab -e
# m h dom mon dow command
SHELL=/bin/bash
30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh

Ctrl + O (寫入)——》enter鍵(保存文件名)——》Ctrl + X(退出)
輸入查看命令: crontab -l
# m h dom mon dow command
SHELL=/bin/bash
30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh(建議使用此方式)
語法錯誤:

Syntax error: "(" unexpected

路徑錯誤:

在 /var/spool/crontab/yanggang 中,添加了如下命令,在日誌文件 /var/spool/mail/yanggang 中提示找不到 xxx.sh 路徑
30 * * * * /home/barry/top800/top10/top10_fruits/top10_all.sh


30 * * * * bash /home/barry/top800/top10/top10_fruits/top10_all.sh

這是因為在crontab中使用了絕對路徑執行腳本 top10_all.sh,因此在腳本 top10_all.sh 中引用的其它腳本也都需要使用絕對路徑,才能被crontab找到並執行
如何避免絕對路徑復雜的設置呢,如上文 六、幾個問題 所示,採用如下格式:
30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh(建議使用此方式,先進入該目錄,然後在執行腳本;否則,執行腳本中的其它腳本都需要加絕對路徑)