1、crontab 命令
使用flock命令確保指令碼單例執行
問題的背景:3、nohupnohup 命令我們常常需要通過crontab部署某個指令碼執行某些定時任務,但在實際的過程中,一旦處理不好可能導致在同一時刻出現指令碼的多個執行副本,比如crontab的排程是每5 分鐘執行一次指令碼,如果執行的指令碼能夠在5分鐘內處理完任務並退出,則沒問題,同一時刻最多只有乙個指令碼在執行,但如果指令碼如果無法在5分鐘內處理完任務並退出,則意味著在下乙個5分鐘,指令碼又會被crontab調起來,出現了同一時刻有2個甚至更多的指令碼事例在執行,對應一些依賴關係,需要序列處理的指令碼來說,可能會導致資料相互覆蓋等問題。
為了解決這個問題,指令碼必須能夠自我保護,即在啟動之前判斷是否已經有指令碼啟動了,若當前已經有指令碼啟動了,則雖然crontab排程到該指令碼,但指令碼自身會馬上退出。
解決問題的思路很多,其中一種筆者覺得比較簡便的是:使用檔案鎖,在linux中,提供了flock命令,具體格式如下:
1, flock [-sxon] [-w timeout] lockfile [-c]command...
2, flock [-sxun] [-w timeout] fd
引數說明如下:
-s為共享鎖,在定向為某檔案的fd上設定共享鎖而未釋放鎖的時間內,其他程序試圖在定向為此檔案的fd上設定獨佔鎖的請求失敗,而其他程序試圖在定向為此檔案的fd上設定共享鎖的請求會成功。
-e為獨佔或排他鎖,在定向為某檔案的fd上設定獨佔鎖而未釋放鎖的時間內,其他程序試圖在定向為此檔案的fd上設定共享鎖或獨佔鎖都會失敗。只要未設定-s引數,此引數預設被設定。
-u手動解鎖,一般情況不必須,當fd關閉時,系統會自動解鎖,此引數用於指令碼命令一部分需要非同步執行,一部分可以同步執行的情況。
-n為非阻塞模式,當試圖設定鎖失敗,採用非阻塞模式,直接返回1,並繼續執行下面語句。
-w設定阻塞超時,當超過設定的秒數,就跳出阻塞,返回1,並繼續執行下面語句。
-o必須是使用第一種格式時才可用,表示當執行command前關閉設定鎖的fd,以使command的子程序不保持鎖。
-c執行其後的comand。
flock 是對於整個檔案的建議性鎖。也就是說,如果乙個程序在乙個檔案(inode)上放了鎖,那麼其它程序是可以知道的。它的第乙個引數是檔案描述符,在此檔案描述符關閉時,鎖會自動釋放。而當程序終止時,所有的檔案描述符均會被關閉。於是,很多時候就不用考慮解鎖的事情。
#pledge rec siti ftp export
#*/15 08-12 2 * * flock -xn $jsd/lock/l102602.lock $dcoo/nc.j.071.coordinator.o_pledge_rec_siti_export.sh >>$jsd/log/nc.j.072.coordinator.o_pledge_rec_siti_export.log
用途:不結束通話地執行命令。
語法:nohup command [ arg … ] [ & ]
描述:nohup 命令執行由 command 引數和任何相關的 arg 引數指定的命令,忽略所有結束通話(sighup)訊號。在登出後使用 nohup 命令執行後台中的程式。要執行後台中的 nohup 命令,新增 & ( 表示」and」的符號)到命令的尾部。
無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 檔案中。如果當前目錄的 nohup.out 檔案不可寫,輸出重定向到 $home/nohup.out 檔案中。如果沒有檔案能建立或開啟以用於追加,那麼 command 引數指定的命令不可呼叫。如果標準錯誤是乙個終端,那麼把指定的命令寫給標準錯誤的所有輸出作為標準輸出重定向到相同的檔案描述符。
退出狀態:該命令返回下列出口值:
126 可以查詢但不能呼叫 command 引數指定的命令。
127 nohup 命令發生錯誤或不能查詢由 command 引數指定的命令。
否則,nohup 命令的退出狀態是 command 引數指定命令的退出狀態。
nohup命令及其輸出檔案
nohup命令:如果你正在執行乙個程序,而且你覺得在退出帳戶時該程序還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續執行相應的程序。nohup就是不掛起的意思( n ohang up)。
該命令的一般形式為:nohup command &
使用nohup命令提交作業
如果使用nohup命令提交作業,那麼在預設情況下該作業的所有輸出都被重定向到乙個名為nohup.out的檔案中,除非另外指定了輸出檔案:
nohup command > myout.file 2>&1 &
在上面的例子中,輸出被重定向到myout.file檔案中。
使用 jobs 檢視任務。
使用 fg %n 關閉。
fyi:
4.find 查詢檔案
在當前目錄下搜尋指定檔案:
find . -name test.txt
在當前目錄下模糊搜尋檔案:
find . -name '*.txt'
在當前目錄下搜尋特定屬性的檔案:
find . -amin -10 # 查詢在系統中最後10分鐘訪問的檔案
find . -atime -2 # 查詢在系統中最後48小時訪問的檔案
find . -empty # 查詢在系統中為空的檔案或者資料夾
find . -group cat # 查詢在系統中屬於 groupcat的檔案
find . -mmin -5 # 查詢在系統中最後5分鐘裡修改過的檔案
find . -mtime -1 #查詢在系統中最後24小時裡修改過的檔案
find . -nouser #查詢在系統中屬於作廢使用者的檔案
find . -user fred #查詢在系統中屬於fred這個使用者的檔案
在當前目錄搜尋檔案內容含有某字串(大小寫敏感)的檔案:
find . -type f | xargs grep 'your_string'
在當前目錄搜尋檔案內容含有某字串(大小寫敏感)的特定檔案:
find . -type f -name '*.sh' | xargs grep 'your_string'
在當前目錄搜尋檔案內容含有某字串(忽略大小寫)的特定檔案:
find . -type f -name '*.sh' | xargs grep -i 'your_string'
5. php 使用sftp/ftp抓取檔案
fry get file
<?php
$connection = ssh2_connect('113.57.154.56', 22);
ssh2_auth_password($connection, 'hcc_daiba', '1234@abc');
$sftp = ssh2_sftp($connection);
echo $sftp;
#echo "connect";
$statinfo = ssh2_sftp_stat($sftp, '/daiba/123/123.txt');
#echo $statinfo;
$realpath = ssh2_sftp_realpath($sftp,'/daiba/123/123.txt');
$stream = fopen("ssh2.sftp:///daiba/123/123.txt", 'r');
echo fread($stream,filesize("123.txt"));
fclose($stream);
?>
and write file
<?php
$connection = ssh2_connect('113.57.154.56', 22);
ssh2_auth_password($connection, 'hcc_daiba', '1234@abc');
$sftp = ssh2_sftp($connection);
echo $sftp;
#echo "connect";
$statinfo = ssh2_sftp_stat($sftp, '/daiba/123/123.txt');
#echo $statinfo;
$realpath = ssh2_sftp_realpath($sftp,'/daiba/123/123.txt');
$stream = fopen("ssh2.sftp:///daiba/123/abc.txt", 'w+');
$txt= "abcabc";
fwrite($stream,$txt);
fclose($stream);
?>
Doxygen常用命令 例項
doxygen常用注釋命令 1.檔案資訊 1 file 檔案宣告,即當前檔名 2 author 作者 3 version 版本,推薦使用 id 4 todo 改進,可以指定針對的版本 2.模組資訊 1 var 模組變數說明 2 typedef 模組變數型別說明 3.函式資訊 1 param 引數說明...
monkey常用命令例項
一 常用命令的使用 1.monkey進行壓力測試的命令是什麼呢?eg adb shell monkey p com.android.calculator 100 2.如何重現crash anr過程呢?eg adb shell monkey s 123456 p com.android.calcula...
docker常用命令 Docker 常用命令筆錄
格式docker run 選項 映象 命令 引數.示例docker run it rm ubuntu 16.04 bash 示例解釋 it 這是兩個引數,乙個是 i,表示互動式操作,乙個是 t表示終端 rm 這個引數是說容器退出後隨之將其刪除 ubuntu 16.04 這是指用ubuntu 16.0...