『壹』 linux下的定時器,怎麼用。
時事件,void(*handle)(union sigval v)參數就是處理事件的函數指針。
int omsSetTimer(timer_t *tId,int value,int interval)就是設置定時器。
按你說的,如果要同時起多個定時器,需要定義一個數組timer_t tm[n];int it[n];tm就是定時器結構,it用來記錄對應的定時器是否已經使用,使用中的就是1,沒用的就是0;
主進程消息來了就從it找一個沒用的好鎮來omsSetTimer,如果收到終止消息,那omsSetTimer 定時時間為0
int omsTimer(timer_t *tId,int iValue,int iSeconds ,void(*handle)(union sigval v),void * param)
{
struct sigevent se;
struct itimerspec ts;
memset (&se, 0, sizeof (se));
se.sigev_notify = SIGEV_THREAD;
se.sigev_notify_function = handle;
se.sigev_value.sival_ptr = param;
if (timer_create (CLOCK_REALTIME, &se, tId) < 0)
{
return -1;
}
ts.it_value.tv_sec = iValue;
// ts.it_value.tv_sec =3;
//ts.it_value.tv_nsec = (long)(iValue % 1000) * (1000000L);
ts.it_value.tv_nsec = 0;
ts.it_interval.tv_sec = iSeconds;
//ts.it_interval.tv_nsec = (long)(iSeconds % 1000) * (1000000L);
ts.it_interval.tv_nsec = 0;
if (timer_settime(*tId, TIMER_ABSTIME, &ts, NULL) < 0)
{
return -1;
}
return 0;
}
int omsSetTimer(timer_t *tId,int value,int interval)
{
struct itimerspec ts;
ts.it_value.tv_sec =value;
/高襪鄭/戚頌ts.it_value.tv_nsec = (long)(value % 1000) * (1000000L);
ts.it_value.tv_nsec = 0;
ts.it_interval.tv_sec = interval;
//ts.it_interval.tv_nsec = (long)(interval % 1000) * (1000000L);
ts.it_interval.tv_nsec = 0;
if (timer_settime(*tId, TIMER_ABSTIME, &ts, NULL) < 0)
{
return -1;
}
return 0;
}
另外,團IDC網上有許多產品團購,便宜有口碑
『貳』 Linux下定時任務(系統任務調度、用戶任務調度)crontab使用詳解
crond是Linux下用來周期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務類似,在CentOS Linux release 7.2.1511中默認是開機啟動的,大家可以使用命令:systemctl status crond進行查看。 crond進程定期(每分鍾)檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。用戶在cron表
(也被稱為crontab文件)指定了定時任務,crontab也就是我們常見的定時任務設置命令。Linux下的任務調度分為兩類,系統任務調度和用戶任務調度。
系統任務調度 :系統周期性所要執行的工作,比如寫緩存數據到硬碟、日誌清理等。/etc/crontab文件就是系統任務調度的配置文件。
用戶任務調度 :用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等。用戶可以使用 crontab 工具來定製自己的計劃任務。所有用戶定義的crontab文件都被保存在/var/spool/cron目錄中。其文件名與用戶名一致,使用者許可權文件如下:
通過以上幫助信息,我們可以知道crond是執行任務計劃的一個守護進程。在使用crontab之前我們可以根據幫助信息來設置相關選項,一般情況下我們都使用默認值。
1.建立演示賬號crontab。
2.星號(*)使用舉例。
以上例子中完整演示了crontab從建立到執行的過程。「5 0 * * * echo "GeekDevOps"」表示在每天00:05執行命令:echo "GeekDevOps"。後面的星號表示只要前面條件滿足都執行。例子中的-u選項指定了用戶:crontab,-l選項列舉了相關用戶的用戶任務調度,不指定用戶則默認為root。執行結果默認寫入到用戶mail目錄下的相關文件中。
3.逗號(,)的使用舉例。
現在我們已經把用戶切換到crontab下,因此無需額外指定-u選項相關內容。「3 2,6,8 * * *」表示每天的02:03:00、06:03:00、08:03:00分別執行一次命令:ls /usr/local。
4.減號(-)的使用舉例。
例子中的「0 2-6 * * 6 df -h /」表示用戶crontab在每周六的02:00、03:00、04:00、05:00、06:00執行命令:df -h / 。
5.斜杠(/)的使用舉例。
例子中表示每隔2分鍾執行一次命令:echo "GeekDevOps">>/root/GeekDevOps.txt。
6.crontab的使用非常簡單,很容易理解,只要在取值范圍內設置執行的值基本是沒有問題的。現在我們要刪除已經設置的這些定時任務。
例子中,選項-r表示刪除所有定時任務。選項-i表示在刪除前進行再次確定,輸入y或者Y才能真正刪除。
7.備份我們設置的用戶任務調度配置文件。
8.系統任務調度的使用舉例。
系統任務調度與用戶任務調度不一樣,需要直接在/etc/crontab裡面配置,如果需要指定用戶,還需要在執行命令前指定用戶名。通過crontab -l 命令是查看不到系統任務調度任務的。
『叄』 linux定時任務
linux定時任務使用crontab命令
crontab命令說明
crontab命令被用來提交和管理用戶的需要周期性執行的任務,與windows下的計劃任務類似,當安裝完成操作系統後,默認會安裝此服務工具,並且會自動啟動crond進程,crond進程每分鍾會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。
語法
crontab(選項)(參數)
選項
-e:編輯該用戶的計時器設置;
-l:列出該用戶的計時器設置;
-r:刪除該用戶的計時器設置;
-u<用戶名稱>:指定要設定計時器的用戶名稱。
參數
crontab文件:指定包含待執行任務的crontab文件。
知識擴展
Linux下的任務調度分為兩類:系統任務調度和用戶任務調度。
系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬碟、日誌清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。
/etc/crontab文件包括下面幾行:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""HOME=/
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
前四行是用來配置crond任務運行的環境變數,第一行SHELL變數指定了系統要使用哪個shell,這里是bash,第二行PATH變數指定了系統執行命令的路徑,第三行MAILTO變數指定了crond的任務執行信息將通過電子郵件發送給root用戶,如果MAILTO變數的值為空,則表示不發送任務執行信息給用戶,第四行的HOME變數指定了在執行命令或者腳本時使用的主目錄。
用戶任務調度:用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等。用戶可以使用 crontab 工具來定製自己的計劃任務。所有用戶定義的crontab文件都被保存在/var/spool/cron目錄中。其文件名與用戶名一致,使用者許可權文件如下:
/etc/cron.deny 該文件中所列用戶不允許使用crontab命令
/etc/cron.allow 該文件中所列用戶允許使用crontab命令
/var/spool/cron/ 所有用戶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欄位,表示每十分鍾執行一次。
crond服務
/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置
查看crontab服務狀態:
service crond status
手動啟動crontab服務:
service crond start
查看crontab服務是否已設置為開機啟動,執行命令:
ntsysv
加入開機自動啟動:
chkconfig –level 35 crond on
『肆』 linux怎麼設置定時任務
在linux系統中我們可以修改定時執行的文件實現定時計劃,具體步驟如下。
1、查看定時執行的文件:命令:「crontab -l」,如同ll或者ls一樣,顯示定時任務列表信息,然後查看定時任務詳細信息,定時任務腳本前面的 * * * * *和數字意思解釋如下:從左到右,依次是:分、時、日、月、星期。
2、修改定時腳本裡面的執行內容,並查看定時腳本執行內容。
3、編輯定時執行計劃。這個方式和修改文件類似。使用命令:"crontab -e" ,e表示edit修改的意思。
『伍』 linux中的hrtimer怎麼使用
1.hrtimers - 為高解析度kernel定時器,可作為超時或納燃周期性定時器使用
1). hrtimer_init初始化定時器工作模式。
hrtimer_init(&vibe_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
vibe_timer.function = timer_func;
/* 設置定時器的回調函數,定時器到時該函數將被調用 */
static enum hrtimer_restart timer_func(struct hrtimer *timer)
註:該回調函數為原子操作不能被中斷
關於Linux命令的介紹,看看《linux就該這洞尺虛么學》,具體關於這一章困李地址3w(dot)linuxprobe/chapter-02(dot)html
2). hrtimer_start的第二個參數用於設置超時參數。
hrtimer_start(&vibe_timer,
ktime_set(value / 1000, (value % 1000) * 1000000),HRTIMER_MODE_REL);
3).int hrtimer_cancel(struct hrtimer *timer);
要取消一個hrtimer,使用hrtimer_cancel:
『陸』 linux使用cron怎麼設置定時任務
確定設置crontab的用戶,舉例用root執行:
crontab -e
進入編輯模式:
00
00 * * * 執行命令
表示每天00點00分執行命令一次
其他時間設置:
每五分鍾執行 */5 * * * *
每小時執行 0 * * * *
每天執行 0 0 * * *
每周執行 0 0 * * 0
每月執行 0 0 1 * *
每年執行 0 0 1 1 *
crontab詳解:
1.作用
使用crontab命令可以修改crontab配置文件,然後該配置由cron公用程序在適當的時間執行,該命令使用許可權是所有用戶。
2.格式
crontab [-u user] {-l | -r | -e}
3.主要參數
-e:執行文字編輯器來設定時程表,內空的文字編輯器是vi
-r:刪除目前的時程表
-l列出目前的時程表。
Crontab文件的格式為」M H D
m d cmd」。其中,M代表分鍾(0~59),H代表小時(0~23),D代表天(1~31),m代表月(1~12),d代表一星期內的天(0~6,0為星期天)。Cmd表示要運行的程序,它被送入sh執行,這個shell只有USER、HOME、SHELL三個環境變數。
使用cron服務,用server crond status查看cron服務狀態,如果沒有啟動則service
crond start啟動它,cron服務是一個定時執行的服務,可以通過crontab命令添加或編輯需要定時執行的任務:
crontab –u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數
crontab –l //列出某個用戶cron服務的詳細內容
crontab –r //刪除某個用戶的cron服務
crontab –e //編輯某個用戶的cron服務
crontab filename //以filename作為crontab的任務列表文件並載入
比如說root查看自己的cron設置:crontab –u root –l
再例如,root想刪除fred的cron設置:crontab –u fred –r
在編輯cron服務時,編輯的內容有一些格式和約定,輸入:crontab –u root –e
進入vi編輯模式,編輯的內容一定要符合下面的格式:
*/1
* * * * ls >>/tmp/ls.txt
編輯/etc/crontab文件,在末尾加上一行:30 5 * * * root init 6這樣就將系統配置為每天早上5點30分自動重新啟動。
crontab 文件中的行由6個欄位組成,不同欄位間用空格或tab鍵分隔。前5個欄位指定命令要運行的時間
分鍾(0-59)
小時(0-23)
日期(1-31)
月份(1-12)
星期幾(0-6,其中0代表星期日,好像7也代表星期日)
第6個欄位是一個要在適當時間執行的字元串。
例子:
#MIN HOUR DAY MONTH DAYOFWEEK COMMAND
#每天早上6點10分
10 6 * * * date
#每兩個小時
0 */2
* * * date
#晚上11點到早上8點之間每兩個小時,早上8點
0 23-7/2,8 * * * date
#每個月的4號和每個禮拜一到禮拜三的早上11點
0 11 4 * 1-3 date
#1月1日早上4點
0 4 1 1 * date
補充:在使用crontab的時候,要特別注意的是運行腳本中能夠訪問到的環境變數和當前測試環境中環境變數未必一致,一個比較保險的做法是在運行的腳本程序中自行設置環境變數(export)
(1) 先建一個文件crond.txt如下,每天早上5點36分重新啟動
36 5 * * * reboot
(2)上傳到/opt目錄
(3)運行命令
crontab /opt/crond.txt
crontab –l
讓配置文件生效:如果讓配置文件生效,還得重新啟動cron,切記,既然每個用戶下的cron配置文件修改後,也要重新啟動cron伺服器。
在Fedora和Redhat中,我們應該用:
/etc/rc.d/crond restart
如果讓crond在開機時運行,應該改變其運行級別:
chkconfig –level 35
crond on
service crond status查看cron服務狀態,如果沒有啟動則service
crond start啟動它,cron服務是一個定時執行的服務,可以通過crontab命令添加或者編輯需要定時執行的任務
『柒』 day17-Linux系統定時任務
周期性的執行任務計劃的軟體,Linux定時任務軟體的常用軟體crond
cron是定時任務的軟體名
crond是服務進程名,真正實現定時任務服務
crontab命令是用來設置定時任務
01.使用定時軟體,可以每天每小時按你的需求重復的執行一項工作
02.類似生活中使用的鬧鍾,可以自動完成操作命令,定時備份系統數據信岩消絕息。
01.定時任務服務環境准備
a. 啟動crond服務
關閉crond服務:systemctl stop crond.service
啟動crond服務:systemctl start crond.service
查看crond服務狀態:systemctl status crond.service
b.設置開機自啟動
開機自啟動crond服務:systemctl enable crond.service
開機不啟動crond服務:systemctl disable crond.service
02.系統定時任務
a. 系統定時任務周期:
每小時 目錄/etc/cron.hourly
每一天 目錄/etc/cron.daily
每一周 目錄/etc/cron.weekly
每個月 目錄/etc/cron.monthly
b. /etc/crontab 系統定時任務的配置文件之一(有記錄定時任務格式)
c. 系統定時任務+logrotate命令 完成對日誌的切割/日誌輪詢
/var/log/cron
/var/log/messages
/var/log/secure
02.用戶定時任務
用戶定時任務查看 crontab -l == cat /var/spool/cron/root
用戶定時任務編輯 crontab -e == vim /var/spool/cron/root
定時任務配置文件 /var/spool/cron/root (root文件表示root用戶設置的定時任務,文件名是根據用戶名設置的)
註:定時任務常見提示信息
a. no crontab for root 當前用戶沒有編輯定時任務
b. Do you want to retry the same edit 定時任務編輯錯誤是否繼續
03.定時任務編寫語法格式:
定時任務常用符號
* 每
/n 每隔
- 連續區間
, 分隔
04.定時任務編寫流程
a. 測試定時執行命令(定時任務執行的命令用絕對路徑)
b. 編寫定時任務信息(先編寫注釋信息,編寫定時任務)
c. 檢查定時任務效果:查看定時任務日誌(可以橋啟臨時修改定時任務每分鍾執行,最終修改定時任務的時間)
定時任務對%不識別,百分號需要轉義\%
盡量使用腳本文件實現
a. 測試定時執行腳本(定時任務執行的腳本利用絕對路徑/bin/sh)
b. 編寫定時任務信息(先編寫注釋信粗姿息,編寫定時任務 在任務信息後邊加上>/dev/null 2>&1 避免產生很多沒用的小文件佔用磁碟inode)
c. 檢查定時任務效果:查看定時任務日誌(可以臨時修改定時任務每分鍾執行,最終修改定時任務的時間)
定時任務編寫要領
(1)為定時任務規則加必要的注釋
(2)所有的定時任務盡量都以腳本的形式執行
(3)在執行的shell腳本前加上/bin/sh
(4)在定時任務中命令或腳本的結尾加上 >/dev/null 2>&1
(5)在指定用戶下執行相關定時任務
(6)生產任務計劃程序中不要隨意列印輸出信息,有輸出的想法去掉
(7)定時任務執行的腳本喲啊存放到規范路徑下
(8)配置定時任務要規范操作過程,減少出錯
(9)定時任務腳本中程序命令及路徑盡量用全路徑
(10)時間變了%號要用反斜線轉義(只有定時任務里時命令時需要)
(11)若腳本中調用了系統環境變數,要重現定義
(12)出錯或無法執行,就檢查/var/log/cron日誌
『捌』 有誰會用linux裡面的定時器timer_list
這段代碼是Linux的一個內核模塊程序,timer_list也是Linux內核中的數據結構。模塊程序不是以main函數作為入口的。而是以mole_init指定。
mole_init/mole_exit分別用於指定模塊的載入和卸載函數。
載入模塊(insmod)時,會調用mytimer_init函數。這個函數設置一個定時器,在定時器超時時執行myfunc函數,指定函數參數為「Hello,world!」。
myfunc執行時,會輸出「Hello,world!」,mod_timer函數會將定時器重新計時,兩秒後到期。
因此整個代碼執行起來後的現象就是每兩秒輸出一次Hello,world!