在freebsd5.4下面做開發,需要定期備份mysql資料,開始在網上找了bash的指令碼,但是執行無效,一怒之下,使用php來寫,嘿嘿,其實php寫指令碼也不錯滴。備份其實就是把mysql的資料庫檔案複製出來,當然,也可以使用mysqldump之類的工具把結果生成sql語句,不過我為了方便,就直接複製檔案,並且壓縮一下。看php**:
#!/usr/local/php/bin/php
<?
$date = "mysql_". date("ymd_his");
$cmd = "sudo /usr/bin/tar -cf /home/heiyeluren/db_dump/".$date.".tgz /usr/local/mysql/var/";
system($cmd);
?>
把指令碼儲存到 /home/heiyeluren/db_dump/mysql_dump.php。
上面的**很好理解吧,就是生成乙個按照時間為名字的.tgz檔案,儲存在我的個人主目錄下面,為了指令碼能夠執行,還要加上 chmod +x /home/heiyeluren/db_dump/mysql_dump.php ,讓指令碼能夠有執行許可權。我們自己先試驗一次這個指令碼,看有效沒有:
/home/heiyeluren/db_dump/mysql_dump.php
在看看有沒有生成檔案:
ls /home/heiyeluren/db_dump/
嗯,生成了 mysql_20051206_***xx.tgz的檔案,證明有效果。
好,切換到root使用者:su - root,輸入密碼,新增cron任務:
crontab -e
加入任務:
*/1 * * * * /usr/local/php/bin/php /home/heiyeluren/db_dump/mysql_dump.php > /dev/null
嘿嘿,設定了一分鐘執行一次,設這麼快,主要是看看有沒有效果。
等了兩分鐘,看了一下,嗯?怎麼在 /home/heiyeluren/db_dump/下面還是沒有 .tgz 的檔案?怎麼回事呢?
檢視cron的日誌:
cat /var/log/cron
刷刷列了好幾螢幕,看到類似這樣的:
dec 6 19:32:00 bsd /usr/sbin/cron[12256]: (root) cmd (/usr/local/php/bin/php /home/heiyeluren/db_dump/mysql_dump.php > /dev/null)
證明我的指令碼執行了。。。但是為什麼沒有效果呢?
哦,我想起來了,好像cron能夠把指令碼中的輸出當作郵件傳送給建立cron的使用者,嗯,好,我們去掉 > /dev/null 這段,就讓我們cron直接傳送郵件給我們的root:
crontab -e
修改為:
*/1 * * * * /usr/local/php/bin/php /home/heiyeluren/db_dump/mysql_dump.php
等了一會,看一下郵件,可以使用mail命令來看,也可以直接在 /var/spool/clientmqueue/ 下面看,我們選擇第二種:
ls /var/spool/clientmqueue/
列出好多檔案:
dfjb6bg0se012107 dfjb6bn0jp012185
dfjb6bu1mj012248 qfjb6bg0se012107
qfjb6bn0jp012185 qfjb6bu1mj012248
dfjb6bh0ap012123 dfjb6bo1id012192
dfjb6bv0dl012254 qfjb6bh0ap012123
qfjb6bo1id012192 qfjb6bv0dl012254
我們開啟乙個來看:
cat /var/spool/clientmqueue/dfjb6bg0se012107
嗯,看到輸出:
sudo: not found
???難道是我們的php指令碼有問題,不是我測試過沒有問題的嗎?哦,看提示,原來是sudo命令沒有找到,為什麼呢?因為所有指令碼中引用的程式都必須是絕對路徑滴,不然會找不到,唉,犯錯了。
嗯,既然我是用root執行的,許可權是沒有問題滴,何不把sudo給刪除呢,說幹就幹,修改指令碼:
vi /home/heiyeluren/db_dump/mysql_dump.php
修改為:
#!/usr/local/php/bin/php
<?
$date = "mysql_". date("ymd_his");
$cmd = "/usr/bin/tar -cf /home/heiyeluren/db_dump/".$date.".tgz /usr/local/mysql/var/";
system($cmd);
?>
嘿嘿,去掉了sodu,嗯,儲存退出,看看我們的crontab效果如何。。。
哈哈,一分鐘過後,檢視下目錄:
ls /home/heiyeluren/db_dump
嘿嘿,有兩個 .tgz 的檔案了:mysql_20051206_***x.tgz,嗯,證明成功了,但是不能總是讓cron給root發郵件呀,不然一會功夫伺服器空間就沒有了,修改cron任務為:
0 6 * * * /usr/local/php/bin/php /home/heiyeluren/db_dump/mysql_dump.php > /dev/null
就是每天早上的六點執行一次,並且把任何輸出到輸出到 /dev/null 中,不要給root發郵件。
好,終於解決,不容易,涉及很多知識電,不過增長了經驗,不是嗎?
(好久沒寫blog,自責一下!)
解決cron不執行的問題
在freebsd5.4下面做開發,需要定期備份mysql資料,開始在網上找了bash的指令碼,但是執行無效,一怒之下,使用php來寫,嘿嘿,其實php寫指令碼也不錯滴。備份其實就是把mysql的資料庫檔案複製出來,當然,也可以使用mysqldump之類的工具把結果生成sql語句,不過我為了方便,就直...
解決cron不執行的問題
在freebsd5.4下面做開發,需要定期備份mysql資料,開始在網上找了bash的指令碼,但是執行無效,一怒之下,使用php來寫,嘿嘿,其實php寫指令碼也不錯滴。備份其實就是把mysql的資料庫檔案複製出來,當然,也可以使用mysqldump之類的工具把結果生成sql語句,不過我為了方便,就直...
解決ROS rqt 不能執行的問題,不徹底
環境ubuntu 16.04,qt 5.7.1,python2.7,kinect ros,執行ros時,需要rqt console等,但出現如下錯誤 traceback most recent call last file opt ros kinetic bin rqt console line 8...