Mybatis中Foreach的用法


前言

筆者在進行試驗時,有以下幾個操作習慣,具體參考

Centos7默認開通了80端口和22端口。

 

查看服務相關信息

 

$ systemctl status crond		// crond狀態
$ systemctl is-enabled crond	// 是否開機自啟

 

基礎知識

 

Cron時間表達式詳解

 

表達式概述

 

.---------------- minute (0 - 59):代表分鍾,取值范圍00-59
|  .------------- hour (0 - 23):代表小時,取值范圍00-23
|  |  .---------- day of month (1 - 31):代表月份中的日期,取值范圍01-31
|  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...:代表月份,取值范圍01-12
|  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
|  |  |  |  |
*  *  *  *  * user-name  command to be executed

 

特殊符號含義

特殊符號 含義
* 表示任意時間都,也是”每”的意思,舉例:如00 23 * * *cmd表示每月每周每日的23:00都執行cmd任務
- 表示分隔符,表示一個時間段范圍段,如17-19點,每小時的00分執行任務,00 17-19 * * * cmd 。就是17,18,19點整點分別執行的意思
, 表示分隔時段的意思,30 17,18,19 * * * /bin.sh /scripts/dingjian.sh表示每天17,18和19點的半點時刻執行/scripts/dingjian.sh腳本。也可以和”-”結合使用,如:30 3-5,17-19 * * * /scripts/dingjian.sh
/n 即”每隔n單位時間”,如:每10分鍾執行一次任務可以寫成 /10 * * * * cmd,其中“/10”的范圍是0-59,因此也可以寫成0-59/10

 

命令概述

 

指定語法

 

crontab [-u user] file crontab -u user (default operation is replace, per 1003.2) -e (edit user's crontab) 編輯用戶命令 -l (list user's crontab) 列表 -r (delete user's crontab) 刪除用戶任務 -i (prompt before deleting user's crontab) 在刪除前確認 -s (selinux context) 
參數 含義 示例
-l 查看crontab文件內容,提示:l為list的縮寫 crontab -l
-e 編輯crontab文件內容,提示:e可為edit 的縮寫 crontab -e
-i 刪除crontab文件內容,刪除前會提示確認,用得少 crontab -ri
-r 刪除crontab文件內容,用得很少 crontab -r
-u 指定使用的用戶執行任務 crontab -u boy -l

-I –r參數在生產中很少用,沒什么需求必須要用-e進去編輯即可

補充:crontab {-l|-e} 實際上就是在操作/var/spool/cron/當前用戶這樣的文件

 

相關文件

文件  
/etc/cron.deny 該文件中所列用戶不允許使用crontab命令
/etc/cron.allow 該文件中所列用戶允許使用crontab命令,優先於/etc/cron.deny
/var/spool/cron/ 所有用戶crontab配置文件默認都存放在此目錄,文件名以用戶名命名
/var/log/cron 定時任務的執行日志

 

示例

 

// 1. 查看當前用戶的定時任務
	$ crontab -l 

// 2. 為當前用戶編輯一個定時任務
	$ crontab -e // 3. 清空當前用戶的定時任務 $ crontab -r // 4. 每分鍾打印一次自己的英文名字到 /home/test/name.txt 的文件中 方式一: $ mkdir /home/test // 創建文件目錄 $ crontab -e // 輸入以下內容 # print my name * * * * * echo "zeanzai" >> /home/test/name.txt $ cat /home/test/name.txt // 查看輸出 zeanzai 方式二: $ mkdir /home/test // 創建文件目錄 $ vi /var/spool/cron/root // 編輯定時任務配置文件,輸入以下內容 # print my name * * * * * echo "zeanzai" >> /home/test/name.txt // 5. 查看定時任務執行的日志 $ tail -f /var/log/cron // 6. 查看定時任務的配置文件 方式一: $ ll /var/spool/cron/ $ cat root 方式二: $ crontab -l // 7. 刪除定時任務 $ crontab -ir yes // 8. 每天00:01打包昨天的日志文件到tar文件,並刪除昨天的日志文件 $ mkdir /home/logs/school-hydroelectricity/tar $ vi /etc/scripts/tar.sh cd /home/logs/school-hydroelectricity tar zcf ./tar/$(date +'%Y-%m-%d' -d '-1 days').tar.gz ./$(date +'%Y-%m-%d' -d '-1 days') rm -rf ./$(date +'%Y-%m-%d' -d '-1 days') $ ./etc/scripts/tar.sh $ crontab -e # 每天00:01打包昨天的日志文件到tar目錄中,並刪除昨天的日志文件,要求打包文件以日期命名 * * * * * /bin/sh /etc/scripts/tar.sh 

 

生產問題案例及解決過程

面試題:維護的時候,創建文件提示”No space left on device”,請問你這是什么故障:

解答:磁盤空間block滿了或者inode被占滿了

 

故障描述及說明

某年某月甘日某時,某人在工作中設置crontab定時任務規則保存時,提示” No space left on device”,此時用df -h檢查磁盤,發現還有剩余空間,用df -I 檢查則顯示/var目錄己占用100%的inode數量,看來是inode數量耗盡,導致系統無法在/var目錄下創建文件,因為定時任務的配置在/var/spool/cron下,ext3文件系統中,每個文件需要占一個inode。

 

故障原因分析

當系統中crond定時任務執行程序有輸出內容時,輸出內容會以郵件形式發給crond的用戶(默認是root),而sendmail等mail服務沒有啟動時,這些輸出內容以為支在郵件隊列臨時目錄,產生這些碎文件,導致消耗inode數量,一旦inode數量耗盡,就會導致系統無法寫入文件,而報上述錯誤:No space left on device.

 

亡羊補牢解決方法

  1. 盡量將crontab里面的命令或腳本中的命令結尾加上>/dev/null 2>&1,或在做定時執行腳本時,把屏幕輸出定向到指定文件里

  2. 當然也可以開啟郵件服務,不過最好不做,因為郵件服務會帶來安全問題

  3. 優化系統,加定時清理任務,如find /var/spool/clientmqueue/ -type f -mtime +30|xargs rm -f

 

調試crontab定時任務

  1. 增加執行頻率調試任務
  2. 調整系統時間調試任務
  3. 通過日志輸出調試定時任務
  4. 通過定時任務日志調試定時任務

 

參考

  1. http://blog.51cto.com/mrxiong2017/2084803
  2. https://blog.csdn.net/andrewgb/article/details/47374963


免責聲明!

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



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