Ubuntu系統定時作業無效果的排錯
因一個資料庫日誌檔案無限擴充套件,最終填滿磁碟空間而導致資料庫Hang住,為監控日誌檔案增長情況,建立一個定時作業以執行如下SQL命令來查詢資料檔案大小:
select f.name, file_id fileid, physical_name filename, g.name filegroup
, iif(size < 128, cast(size * 8 as varchar) + ' KB'
, iif(size / 128 < 1024, cast(size / 128 as varchar) + ' MB'
, cast(size / 128 / 1024 as varchar) + ' GB')) size
, iif(max_size=-1, 'Unlimited'
, iif(max_size<128, convert(varchar(20), cast(max_size as bigint) * 8) + ' KB'
, iif(max_size / 128 < 1024, cast(max_size / 128 as varchar) + ' MB'
, cast(max_size / 128 / 1024 as varchar) + ' GB'))) maxsize
, iif(is_percent_growth=1, cast(growth as varchar(3)) + '%'
, iif(growth < 128, convert(varchar(20), growth * 8) + ' KB'
, convert(varchar(20), growth / 128) + ' MB')) growth
, f.type_desc usage
from sys.database_files f left join sys.filegroups g on f.data_space_id=g.data_space_id
建立作業:
csyy@server02:~$ crontab -l
25 * * * * sqlcmd -S . -U sa -P 'Password' -i MonitEmrFileSize.sql -o checkfilesize/`date +%Y%m%d.%H%M.txt`
csyy@server02:~$ cat MonitEmrFileSize.sql
use emr22
go
select cast(f.name as varchar(20)) name, cast(file_id as varchar(6)) fileid
, cast(physical_name as varchar(40)) filename, cast(g.name as varchar(10)) filegroup
, cast(iif(size < 128, cast(size * 8 as varchar) + ' KB'
, iif(size / 128 < 1024, cast(size / 128 as varchar) + ' MB'
, cast(size / 128 / 1024 as varchar) + ' GB')) as varchar(10)) size
, cast(iif(max_size=-1, 'Unlimited'
, iif(max_size<128, convert(varchar(20), cast(max_size as bigint) * 8) + ' KB'
, iif(max_size / 128 < 1024, cast(max_size / 128 as varchar) + ' MB'
, cast(max_size / 128 / 1024 as varchar) + ' GB'))) as varchar(10)) maxsize
, cast(iif(is_percent_growth=1, cast(growth as varchar(3)) + '%'
, iif(growth < 128, convert(varchar(20), growth * 8) + ' KB'
, convert(varchar(20), growth / 128) + ' MB')) as varchar(10)) growth
, cast(f.type_desc as varchar(10)) usage
from sys.database_files f left join sys.filegroups g on f.data_space_id=g.data_space_id
go
exit
過了定時作業執行時間,未生成結果檔案。
1 、一開始懷疑是普通使用者沒有執行定時作業的許可權,
將作業任務改為root使用者來執行,但還是沒有效果;
2 、檢查cron服務狀態,提示“未安裝MTA,放棄輸出”,;
root@server02:/home/csyy# service cron status
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-11-26 22:38:26 CST; 2 days ago
Docs: man:cron(8)
Main PID: 3690 (cron)
Tasks: 1
Memory: 119.8M
CPU: 12.711s
CGroup: /system.slice/cron.service
└─3690 /usr/sbin/cron -f
Nov 29 15:55:01 server02 CRON[171781]: (root) CMD (MonitEmrFileSize.sh > checksize/`date +)
Nov 29 15:55:01 server02 CRON[171769]: pam_unix(cron:session): session closed for user root
Nov 29 15:55:01 server02 CRON[171770]: (CRON) info (No MTA installed, discarding output)
Nov 29 15:55:01 server02 CRON[171770]: pam_unix(cron:session): session closed for user root
Nov 29 15:55:01 server02 CRON[171773]: (CRON) info (No MTA installed, discarding output)
Nov 29 15:55:01 server02 CRON[171773]: pam_unix(cron:session): session closed for user csyy
Nov 29 15:55:01 server02 CRON[171772]: (CRON) info (No MTA installed, discarding output)
Nov 29 15:55:01 server02 CRON[171772]: pam_unix(cron:session): session closed for user csyy
Nov 29 15:55:01 server02 CRON[171771]: (CRON) info (No MTA installed, discarding output)
Nov 29 15:55:01 server02 CRON[171771]: pam_unix(cron:session): session closed for user root
原因:系統未安裝MTA,所以在Job作業的命令中不能有標準輸出和標準錯誤輸出,否則作業會將輸出重定向到郵件,導致觸發“未安裝MTA”的錯誤。
3 、將CRON中的命令最後加上“ >/dev/null 2>&1”後,任務還是未有結果;
csyy@server02:~$ crontab -l
25 * * * * sqlcmd -S . -U sa -P 'Password' -i MonitEmrFileSize.sql -o checkfilesize/`date +%Y%m%d.%H%M.txt`>/dev/null 2>&1
4 、將CRON中的命令作為一個shell命令,在CRON中執行此shell命令,並在最後加上“ >/dev/null 2>&1”後,定時任務終於有了結果;
csyy@server02:~$ crontab -l
25 * * * * ShellCmd.sh >/dev/null 2>&1
csyy@server02:~$ cat ShellCmd.sh
sqlcmd -S . -U sa -P 'Password' -i MonitEmrFileSize.sql -o checkfilesize/`date +%Y%m%d.%H%M.txt`
解釋:第3步後,雖然從Shell命令的角度看,標準輸出和標準錯誤輸出已經全部進行了重定向,命令已經沒有了輸出,但在命令中還巢狀了一個Shell命令date,標準輸出和標準錯誤輸出未進行重定向,導致觸發“未安裝MTA”的錯誤。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/81227/viewspace-2668693/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 無作業系統時的裝置驅動和有作業系統時的裝置驅動作業系統
- Ubuntu作業系統的基本配置與使用Ubuntu作業系統
- Linux作業系統定時備份檔案方法Linux作業系統
- 作業系統--錯題集作業系統
- 作業系統錯誤點作業系統
- 作業系統之排程演算法作業系統演算法
- 在Ubuntu作業系統裡安裝DockerUbuntu作業系統Docker
- 作業系統精髓設計原理 程式排程作業系統
- 【git】Ubuntu作業系統上安裝Git LFSGitUbuntu作業系統
- Centos7.9、Ubuntu作業系統圖文安裝CentOSUbuntu作業系統
- 【作業系統】4.程序排程演算法作業系統演算法
- 作業系統(1)——作業系統概述作業系統
- 作業系統(一):作業系統概述作業系統
- Ubuntu系統設定中文語言的方法教程,Ubuntu系統怎麼設定中文語言?Ubuntu
- 合理設定作業系統網路卡的MTU值作業系統
- 作業系統4——處理機排程與死鎖作業系統
- ubuntu無法進入系統Ubuntu
- 學習筆記 作業系統Linux-Ubuntu 之初次新增系統呼叫筆記作業系統LinuxUbuntu
- 作業系統(二):作業系統結構作業系統
- 作業系統綜合題之“採用實時排程,可排程的限制條件和可排程的最大X值是是多少ms的CPU時間”作業系統
- 作業系統 作業5作業系統
- 作業系統錯誤5:拒絕訪問作業系統
- 生產作業流程防錯監測系統
- Ubuntu 系統 apt 報錯:relocation errorUbuntuAPTError
- 作業系統2—作業系統概論(下)作業系統
- 作業系統1—作業系統概論(上)作業系統
- 定義雲時代的作業系統,《2022 雲原生產業發展白皮書》正式釋出!作業系統產業
- 課程排課系統:智慧排課+線上約課+直播上課+作業打卡!
- 《作業系統》作業系統
- [作業系統]作業系統
- 作業系統作業系統
- 計算機作業系統|作業系統引論計算機作業系統
- 作業系統: Unix作業系統演進簡史作業系統
- nfs導致的作業系統目錄無法訪問NFS作業系統
- Win10安裝Ubuntu雙系統導致Win10系統時間出錯Win10Ubuntu
- 智慧家居系統的匯流排系統和無線系統的具體介紹
- 臥看雲起時-作業系統篇02作業系統
- 作業系統-1.1_2作業系統四個特徵作業系統特徵