linux環境中,如何通過手動創建crontab文件的方式來設置crontab定時調度任務?


需求描述:

  之前在創建定時任務的時候,都是通過cronab -e的方式進行創建,今天在做通過腳本部署定時任務的時候,

  就想,通過crontab -e編輯的定時任務存放在哪個文件里,是否,可以手動的編輯這個文件來創建定時任務呢,

  在此找到這個定時任務的文件,然后通過手動創建文件,看是否能夠正確的執行.

操作過程:

1.通過crontab -e來創建定時任務

[root@testvm02 ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab          #安裝了新的crontab
[root@testvm02 ~]# crontab -l
*/1 * * * * /usr/sbin/ntpdate 192.168.53.22

2.查看root的crontab對應的文件

[root@testvm02 cron]# pwd
/var/spool/cron               #crontab文件在這個目錄下,每個用戶一個單獨的文件.
[root@testvm02 cron]# ls -l
total 4
-rw------- 1 root root 44 Aug  8 10:15 root
[root@testvm02 cron]# cat root               #查看root文件,就是剛剛編輯好的定時任務,該定時任務的作用是進行時間同步. */1 * * * * /usr/sbin/ntpdate 192.168.53.22    

3.通過普通用戶,創建crontab,查看生成的crontab文件

[root@testvm02 cron]# ls -l
total 4
-rw------- 1 aiprd aiprd  0 Aug  8 10:21 aiprd   #用戶和用戶組都是普通的用戶的. -rw------- 1 root  root  44 Aug  8 10:15 root

4.通過crontab -e將crontab中內容刪除掉

[root@testvm02 cron]# crontab -e
crontab: installing new crontab
[root@testvm02 cron]# crontab -l
[root@testvm02 cron]# cat root #root文件中的內容也被刪除掉了.

5.手動將定時任務的內容輸入到root文件

[root@testvm02 cron]# echo '*/1 * * * * /usr/sbin/ntpdate 192.168.53.22' >> /var/spool/cron/root
[root@testvm02 cron]# cat root
*/1 * * * * /usr/sbin/ntpdate 192.168.53.22
[root@testvm02 cron]# ls -l root
-rw------- 1 root root 44 Aug  8 10:25 root

6.修改系統時間為一個錯誤的時間,看看幾分鍾之后,時間能否被正確的修改

[root@testvm02 cron]# date -s "2018-08-08 01:00:00"
Wed Aug  8 01:00:00 CST 2018
[root@testvm02 cron]# clock -w
[root@testvm02 cron]# date
Wed Aug  8 01:00:05 CST 2018
[root@testvm02 cron]# date
Wed Aug  8 01:00:13 CST 2018
[root@testvm02 cron]# date
Wed Aug  8 01:00:38 CST 2018
[root@testvm02 cron]# date
Wed Aug  8 01:00:40 CST 2018
[root@testvm02 cron]# date
Wed Aug  8 01:00:49 CST 2018
[root@testvm02 cron]# date
Wed Aug  8 01:00:52 CST 2018
[root@testvm02 cron]# date
Wed Aug  8 10:28:02 CST 2018
You have new mail in /var/spool/mail/root
[root@testvm02 cron]# date
Wed Aug  8 10:28:04 CST 2018

 

備注:在一分鍾之后,系統時間,自動同步為正確的時間了.說明,直接對文件進行編輯也是能夠是的crontab調度成功的.

6.對於一個普通用戶如何來創建這個定時任務的文件

[root@testvm02 cron]# echo '*/1 * * * * date > /tmp/date.log' >> /var/spool/cron/aiprd
You have new mail in /var/spool/mail/root
[root@testvm02 cron]# ls -l /var/spool/cron/aiprd
-rw-r--r-- 1 root root 33 Aug  8 10:33 /var/spool/cron/aiprd   #並沒有修改這個文件的權限,用戶和用戶組.

 7.切換到普通用戶下,執行crontab -l,然后查看具體有沒有日志輸出

[root@testvm02 ~]# su - aiprd
[aiprd@testvm02 ~]$ crontab -l
*/1 * * * * date > /tmp/date.log            #包含了剛剛編寫的內容.
[aiprd@testvm02 ~]$ tail -f /tmp/date.log   #查看也發現有任務確實在執行.
Wed Aug  8 10:35:01 CST 2018
[aiprd@testvm02 ~]$ ls -l /tmp/date.log
-rw-r--r-- 1 aiprd aiprd 29 Aug  8 10:36 /tmp/date.log #同時,生成的文件,也是aiprd用戶和用戶組.

備注:說明,對於普通用戶,也可以在root用戶下直接編輯/var/spool/cron/文件,為普通用戶創建crontab定時任務.可以不考慮該文件的權限,如果為了更安全的考慮,可以修改文件的用戶和用戶組.

[root@testvm02 cron]# chown aiprd:aiprd /var/spool/cron/aiprd
You have new mail in /var/spool/mail/root
[root@testvm02 cron]# chmod 600 /var/spool/cron/aiprd
[root@testvm02 cron]# ls -l /var/spool/cron/aiprd
-rw------- 1 aiprd aiprd 33 Aug  8 10:33 /var/spool/cron/aiprd

備注:實踐證明,修改不修改用戶組,權限都不影響調度,但是為了和默認使用contab創建的文件的權限和用戶組保持一致性,可以這么設置.

 

小結:

  可以通過直接在/var/spool/cron目錄下為特定的用戶創建crontab文件,就可以實現用戶的定時任務調度,可以為root用戶和普通用戶進行創建.前提在root下執行.

 

注意:

  普通用戶沒有在cron中寫文件的權限,所以要在root用戶下執行創建編輯文件.

 

文檔創建時間:2018年8月8日10:41:53


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM