今天給各位分享linux每隔3秒執行一次的知識,其中也會對shell每隔10s執行命令進行解釋,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在開始吧!
如何讓shell腳本每天定時執行
這個非常簡單,crontab命令就可以輕松實現,下面我簡單介紹一下操作過程:
1.首先,新建需要定時執行的shell腳本,這里我為了方便說明問題,新建了一個打印當前時間的腳本date.sh,內容如下,非常簡單,就是一行date命令,然后將輸出重定向到一個date.txt文本中:
2.接著就是將這個date.sh腳本添加到定時任務中,直接運行“crontab-e”命令添加就行,如下,這里先以每分鐘執行一次腳本為例,看定時任務能否正常執行,編輯“*/1****/root/date.sh”保存就行,如下:
至于這6個字段的含義,官方文檔有詳細說明,如下,分別代表分、時、天、月、星期和執行的命令,網上介紹資料也非常豐富,感興趣的話,可以搜索一下:
3.最后,我們再查看一下輸出文件date.txt和crontab日志,如下,說明添加的定時任務已經正常運行,這里再替換成你每天定時執行的時間,只需要修改第一、二個字段就行,例如,每天10:30執行,則編輯“3010***/root/date.sh”保存就行:
至此,我們就完成了每天定時執行shell腳本。總的來說,整個過程非常簡單,只要你有一定的Linux基礎,熟悉一下crontab命令,很快就能掌握的,網上也有相關資料和教程,介紹的非常詳細,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。
如何讓linux定時任務crontab按秒執行
在標準的cron語法中,并沒有直接支持按秒執行的選項。cron通常用于在分鐘、小時或日期等級上執行任務。如果你需要以秒為間隔定時執行任務,你可以考慮使用其他工具來實現,如systemd、Python或shell腳本。
一種方法是使用systemd的定時器。首先,創建一個unit文件(例如`mytimer.timer`),指定你想要運行的命令和時間間隔。然后,啟動并激活該定時器。
另一種方法是使用編程語言,比如Python,來編寫一個腳本。你可以在腳本中使用`time.sleep()`函數來設置延遲,并在每次延遲結束后執行你的任務。
以下是一個示例Python腳本,每秒打印一次當前時間:
```python
importtime
whileTrue:
now=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())
print(now)
time.sleep(1)
```
保存以上代碼為`script.py`并運行即可。
請注意,在某些情況下,按秒執行可能會對系統性能產生負面影響。確保評估所需系統資源并做出相應調整以避免不必要的負擔。
Linuxcrontab定時執行任務命令格式與詳細例子
基本格式:
*****command
分時日月周命令
第1列表示分鐘1~59每分鐘用*或者*/1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要運行的命令
crontab文件的一些例子:
3021***/usr/local/etc/rc.d/lighttpdrestart
上面的例子表示每晚的21:30重啟apache。
4541,10,22**/usr/local/etc/rc.d/lighttpdrestart
上面的例子表示每月1、10、22日的4:45重啟apache。
101**6,0/usr/local/etc/rc.d/lighttpdrestart
上面的例子表示每周六、周日的1:10重啟apache。
0,3018-23***/usr/local/etc/rc.d/lighttpdrestart
上面的例子表示在每天18:00至23:00之間每隔30分鐘重啟apache。
023**6/usr/local/etc/rc.d/lighttpdrestart
上面的例子表示每星期六的11:00pm重啟apache。
**/1***/usr/local/etc/rc.d/lighttpdrestart
每一小時重啟apache
*23-7/1***/usr/local/etc/rc.d/lighttpdrestart
晚上11點到早上7點之間,每隔一小時重啟apache
0114*mon-wed/usr/local/etc/rc.d/lighttpdrestart
每月的4號與每周一到周三的11點重啟apache
041jan*/usr/local/etc/rc.d/lighttpdrestart
一月一號的4點重啟apache
名稱:crontab
使用權限:所有使用者
使用方式:
crontabfile[-uuser]-用指定的文件替代目前的crontab。
crontab-[-uuser]-用標準輸入替代目前的crontab.
crontab-1[user]-列出用戶目前的crontab.
crontab-e[user]-編輯用戶目前的crontab.
crontab-d[user]-刪除用戶目前的crontab.
crontab-cdir-指定crontab的目錄。
crontab文件的格式:MHDmdcmd.
M:分鐘(0-59)。
H:小時(0-23)。
D:天(1-31)。
m:月(1-12)。
d:一星期內的天(0~6,0為星期天)。
cmd要運行的程序,程序被送入sh執行,這個shell只有USER,HOME,SHELL這三個環境變量
說明:
crontab是用來讓使用者在固定時間或固定間隔執行程序之用,換句話說,也就是類似使用者的時程表。-uuser是指設定指定
user的時程表,這個前提是你必須要有其權限(比如說是root)才能夠指定他人的時程表。如果不使用-uuser的話,就是表示設
定自己的時程表。
參數:
crontab-e:執行文字編輯器來設定時程表,內定的文字編輯器是VI,如果你想用別的文字編輯器,則請先設定VISUAL環境變數
來指定使用那個文字編輯器(比如說setenvVISUALjoe)
crontab-r:刪除目前的時程表
crontab-l:列出目前的時程表
crontabfile[-uuser]-用指定的文件替代目前的crontab。
時程表的格式如下:
f1f2f3f4f5program
其中f1是表示分鐘,f2表示小時,f3表示一個月份中的第幾日,f4表示月份,f5表示一個星期中的第幾天。program表示要執
行的程序。
當f1為*時表示每分鐘都要執行program,f2為*時表示每小時都要執行程序,其馀類推
當f1為a-b時表示從第a分鐘到第b分鐘這段時間內要執行,f2為a-b時表示從第a到第b小時都要執行,其馀類推
當f1為*/n時表示每n分鐘個時間間隔執行一次,f2為*/n表示每n小時個時間間隔執行一次,其馀類推
當f1為a,b,c,...時表示第a,b,c,...分鐘要執行,f2為a,b,c,...時表示第a,b,c...個小時要執行,其馀類推
使用者也可以將所有的設定先存放在檔案file中,用crontabfile的方式來設定時程表。
例子:
#每天早上7點執行一次/bin/ls:
07***/bin/ls
在12月內,每天的早上6點到12點中,每隔3個小時執行一次/usr/bin/backup:
06-12/3*12*/usr/bin/backup
周一到周五每天下午5:00寄一封信給alex@domain.name:
017**1-5mail-s"hi"alex@domain.name</tmp/maildata
每月每天的午夜0點20分,2點20分,4點20分....執行echo"haha"
200-23/2***echo"haha"
注意:
當程序在你所指定的時間執行后,系統會寄一封信給你,顯示該程序執行的內容,若是你不希望收到這樣的信,請在每一行空一格之
后加上>/dev/null2>&1即可
例子2:
#每天早上6點10分
106***date
#每兩個小時
0*/2***date
#晚上11點到早上8點之間每兩個小時,早上8點
023-7/2,8***date
#每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點
0114*mon-weddate
#1月份日早上4點
041jan*date
范例
$crontab-l列出用戶目前的crontab
Linux中,shell腳本如何使用信號機制去控制線程的開啟關閉
trap是Linux的內建命令,用于捕捉信號,trap命令可以指定收到某種信號時所執行的命令。trap命令的格式如下:trapcommandsig1sig2...sigN,當接收到sinN中任意一個信號時,執行command命令,command命令完成后繼續接收到信號前的操作,直到腳本結束。利用trap命令捕捉INT信號(即與Ctrl+c綁定的中斷信號)。trap還可以忽略某些信號,將command用空字符串代替即可,如trap""TERMINT,忽略kill%n和Ctrl+c發送的信號(kill發送的是TERM信號)。Linux更強勁的殺死進程的命令:kill-9進程號(或kill-9%n作業號)等價與kill-KILL進程號。
舉個例子
:
最近小A需要生產2015年全年的KPI數據報表,現在小A已經將生產腳本寫好了,生產腳本一次只能生產指定一天的KPI數據,假設跑一次生產腳本需要5分鐘,那么:
如果是循環順序執行,那么需要時間:5*365=1825分鐘,約等于6天
如果是一次性放到linux后臺并發執行,365個后臺任務,系統可承受不住哦!
既然不能一次性把365個任務放到linux后臺執行,那么,能不能實現自動地每次將N個任務放到后臺并發執行呢?當然是可以的啦。
#!/bin/bash
source/etc/profile;
#-----------------------------
tempfifo=$$.fifo#$$表示當前執行文件的PID
begin_date=$1#開始時間
end_date=$2#結束時間
if[$#-eq2]
then
if["$begin_date"\>"$end_date"]
then
echo"Error!$begin_dateisgreaterthan$end_date"
exit1;
fi
else
echo"Error!Notenoughparams."
echo"Sample:shloop_kpi2015-12-012015-12-07"
exit2;
fi
#-----------------------------
trap"exec1000>&-;exec1000
mkfifo$tempfifo
exec1000$tempfifo
rm-rf$tempfifo
for((i=1;i
do
echo>&1000
done
while[$begin_date!=$end_date]
do
read-u1000
{
echo$begin_date
hive-fkpi_report.sql--hivevardate=$begin_date
echo>&1000
}&
begin_date=`date-d"+1day$begin_date"+"%Y-%m-%d"`
done
wait
echo"done!!!!!!!!!!"
第6~22行:比如:shloop_kpi_report.sh2015-01-012015-12-01:
$1表示腳本入參的第一個參數,等于2015-01-01
$2表示腳本入參的第二個參數,等于2015-12-01
$#表示腳本入參的個數,等于2
第13行用于比較傳入的兩個日期的大小,\>是轉義
第26行:表示在腳本運行過程中,如果接收到Ctrl+C中斷命令,則關閉文件描述符1000的讀寫,并正常退出
exec1000>&-;表示關閉文件描述符1000的寫
exec1000
trap是捕獲中斷命令
第27~29行:
第27行,創建一個管道文件
第28行,將文件描述符1000與FIFO進行綁定,寫的綁定,則標識對文件描述符1000的所有操作等同于對管道文件$tempfifo的操作
第29行,可能會有這樣的疑問:為什么不直接使用管道文件呢?事實上這并非多此一舉,管道的一個重要特性,就是讀寫必須同時存在,缺失某一個操作,另一個操作就是滯留,而第28行的綁定文件描述符(讀、寫綁定)正好解決了這個問題
第31~34行:對文件描述符1000進行寫入操作。通過循環寫入8個空行,這個8就是我們要定義的后臺并發的線程數。為什么是寫空行而不是寫其它字符?因為管道文件的讀取,是以行為單位的
第37~42行:
第37行,read-u1000的作用就是讀取管道中的一行,在這里就是讀取一個空行;每次讀取管道就會減少一個空行
第39~41行,注意到第42行結尾的&嗎?它表示進程放到linux后臺中執行
第41行,執行完后臺任務之后,往文件描述符1000中寫入一個空行。這是關鍵所在了,由于read-u1000每次操作,都會導致管道減少一個空行,當linux后臺放入了8個任務之后,由于文件描述符1000沒有可讀取的空行,將導致read-u1000一直處于等待。
step7 程序 隔一段時間啟動一次
是的,可以。
如果您需要定期地執行某個操作,可以使用定時器和計劃任務來實現。
您可以編寫一個程序,在程序中設置計劃任務并定期啟動程序。
這樣可以隔一段時間啟動一次程序。
通過定時器和計劃任務實現程序隔一段時間啟動是一種常見的實現方式。
在Windows操作系統中,可以通過“任務計劃程序”實現計劃任務;在Linux操作系統中,可以使用crontab命令設置定時任務。
此外,還可以使用第三方框架或工具來實現程序隔一段時間啟動,如Java的Quartz框架等。
linux什么命令查看程序運行狀態
查看系統所有正在運行的進程,可以用psaux命令(它的-a參數表示,不與終端有關的進程也顯示出來)。還有一個和ps命令相似的命令是pstree,pstree命令用于列出正在運行的進程的進程樹,所謂進程樹就是顯示有關系的進程的相關性,也就是顯示父子進程之間的關系。pstree命令的常見用法是:pstree-Aup
-A參數表示:顯示出來的進程樹連接,用ASCII字符來顯示
-u參數表示:列出進程的所屬用戶
-p參數表示:列出每個進程的PID
ps命令和pstree命令是選取一個時間點的進程狀態,還有一個top命令可以持續檢測進程運行狀態,它顯示的是動態的信息,有點像Windows的任務管理器(不過top命令是命令行),使用方法:
top-d數字
-d參數后面接一個數字表示幾秒更新一次顯示,一般可以設置成2,表示2秒一更新。
linux每隔3秒執行一次的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于shell每隔10s執行命令、linux每隔3秒執行一次的信息別忘了在本站進行查找哦。