Skip to content

Linux Cron 指令

{{% notice style="info" %}} crontab -l 列出該使用者擁有的 crontab 指令
crontab -e 編輯該使用者的 crontab 指令
crontab -r 將使用者的 crontab 全部清除!( 小心使用 )
crontab -u 改變排程的執行身分: crontab -u user filename
{{% /notice %}}

參數特殊字符意義

{{% notice style="info" %}} 【*】:星號,代表任何時刻都接受的意思
【,】:逗號,代表分隔時段。例如:30 9,17 * * * command,代表早上 9 點半和下午五點半都執行 command
【-】:減號,代表一段時間範圍。例如:15 9-12 * * * command,代表從 9 點到 12 點的每個 15 分都執行 command。
【/n】:斜線,n 代表數字,表示每個 n 單位間隔。例如:*/5 * * * * command,代表每隔 5 分鐘執行一次 command。
{{% /notice %}}

還有一些人性化的參數,一次取代全部五個數字參數

{{% notice style="info" %}}

【@reboot】 :僅在開機的時候執行一次。【@yearly】 :一年執行一次,和0 0 1 1 * command效果一樣。
【@annually】:(和@yearly一樣)
【@monthly】:一個月執行一次,和0 0 1 * * command效果一樣。
【@weekly】:一個星期執行一次,和0 0 * * 0 command效果一樣。
【@daily】:每天執行,和0 0 * * * command效果一樣。
【@midnight】:(和@daily一樣)
【@hourly】 :每小時執行,和0 * * * * command效果一樣。
{{% /notice %}}

設定完成後將 cron 重新啟動

admin@file-server2#/etc/init.d/cron restart**

每周備份一次

admin@File-Server2:~~# sudo -i
root@File-Server2:~~# cd /etc
root@File-Server2:~~# vi crontab

增加以下每周六晚上8點備份

{{% notice style="info" %}} 分 時 日 月 週 擁有者 執行命令
0 20 * * 6 root mysqldump -u xwiki -pd6g981a0 xwiki | gzip > /volume1/web/xwiki_db_date +"\%Y-\%m-\%d".sql.gz
週→0&7 為星期日
{{% /notice %}}

加上強制忽略 dump 錯誤

mysqldump -u xwiki -pd6g981a0 --insert-ignore  xwiki | gzip > /volume1/web/xwiki_db_`date +"%Y-%m-%d"`.sql.gz
synoservice -restart crond
範例是每天自動備份另一台機器的資料,但是時間一久 ,備份的資料會越來越多,最後硬碟會撐不住,所以又要加一個自動刪除舊檔的 cron job,下面這個範例會自動刪除五天前的 gz 備份檔。

40 1 * * * userxx /usr/bin/rmdate --date="-5 day" +\%Y-\%m-\%d*.gz

備份還原

mysql -u userName -p -f -D dbName < script.sql
{{% notice style="info" %}} -u: user name
-p: use password
-f force, ignore error
-D: database name
{{% /notice %}}

目前設定 192.168.1.20 crontab -e

{{% notice style="info" %}} 10 20 * * 6 zon pg_dump o12_test | gzip > /home/zon/odoo_db_date +"\%Y-\%m-\%d-\%H-\%M-\%S".gz
0 20 * * 6 zon mysqldump -u xwiki -pd6g981a0 xwiki --insert-ignore | gzip > xwiki_db_date +"\%Y-\%m-\%d-\%H-\%M-\%S".gz
30 20 * * 6 zon mysqldump -u openkm -pd6g981a0 okmdb --insert-ignore | gzip > openkm_db_date +"\%Y-\%m-\%d-\%H-\%M-\%S".gz
40 20 * * 6 zon cp -u .gz /run/user/1000/gvfs/smb-share:server=file-server2.local,share=web
50 20 * * 6 zon cp -u
.pdf /run/user/1000/gvfs/smb-share:server=file-server2.local,share=web
0 21 * * 6 zon cp -u -R /home/zon/tomcat-8.5.24/repository /run/user/1000/gvfs/smb-share:server=file-server2.local,share=web/OpenKm_file/
{{% /notice %}}

/run/user/1000/gvfs/smb-share:server=file-server2.local,share=web

先在pcmanfm 裡掛載並永久紀錄帳號密碼,就可以免用mount.cifs or mount nfs,→須另外安裝nfs cifs 等套件

cp -u 只複製取代有較新的檔案

啟動 crontab

sudo service cron reload
sudo service cron start
or

/etc/init.d/cron reload
/etc/init.d/cron start

db_backup.sh

#!/bin/bash
password="******"
username="admin"
Ip="192.168.1.10"
#sshpass -p "$password" scp /<PATH>/final.txt $username@$Ip:/root/<PATH>
# File-server2 不支援 scp

bakDates=`date +"%Y-%m-%d_%H:%M:%S"`
#pg_dump o13_new1 | gzip > /home/zon/db/o13_new1_`date +"%Y-%m-%d-%H-%M-%S"`.gz
#pg_dump o13_fufeng | gzip > /home/zon/db/o13_fufeng_`date +"%Y-%m-%d-%H-%M-%S"`.gz
#mysqldump -u 'xwiki' -p'd6g981a0' xwiki --insert-ignore | gzip > /home/zon/db/xwiki_db_`date +"%Y-%m-%d-%H-%M-%S"`.gz
#mysqldump -u 'openkm' -p'd6g981a0' okmdb | gzip > /home/zon/db/openkm_db_`date +"%Y-%m-%d-%H-%M-%S"`.gz
pg_dump o13 | gzip > /home/zon/db/o13_$bakDates.gz
#pg_dump o13_fufeng | gzip > /home/zon/db/o13_fufeng_$bakDates.gz
mysqldump -u 'xwiki' -p'd6g981a0' xwiki --insert-ignore | gzip > /home/zon/db/xwiki_db_$bakDates.gz
mysqldump -u 'openkm' -p'd6g981a0' okmdb | gzip > /home/zon/db/openkm_db_$bakDates.gz
#cp -u /home/zon/db/*.gz /run/user/1000/gvfs/smb-share:server=file-server2.local,share=web/db
#cp -u /home/zon/db/*.pdf /run/user/1000/gvfs/smb-share:server=file-server2.local,share=web
#xwiki
#cp -u -R /home/zon/jetty /run/user/1000/gvfs/smb-share:server=file-server2.local,share=web/
#cp -u -R /home/zon/.local/share/Odoo /run/user/1000/gvfs/smb-share:server=file-server2.local,share=web/
#cp -u -R /home/zon/tomcat-8.5.24/repository /run/user/1000/gvfs/smb-share:server=file-server2.local,share=web/OpenKm_file/

#sshpass -p "$password" scp /home/zon/db/*.gz $username@$Ip:/var/services/web/db/
#sshpass -p "$password" scp /home/zon/db/*.pdf $username@$Ip:/var/services/web/
#sshpass -p "$password" scp /home/zon/jetty $username@$Ip:/var/services/web/
#sshpass -p "$password" scp /home/zon/.local/share/Odoo $username@$Ip:/var/services/web/ 
#sshpass -p "$password" scp /home/zon/tomcat-8.5.24/repository $username@$Ip:/var/services/web/OpenKm_file/


sshpass -p "$password" sftp $username@$Ip <<!
put /home/zon/db/o13_$bakDates.gz /web/db/
#put /home/zon/db/o13_fufeng_$bakDates.gz /web/db/ 
put /home/zon/db/xwiki_db_$bakDates.gz /web/db/
put /home/zon/db/openkm_db_$bakDates.gz /web/db/
put -rp /home/zon/db/*.pdf /web/
put -rp /home/zon/.local/share/Odoo /web/
put -rp /home/zon/tomcat-8.5.24/repository /web/OpenKm_file/
bye
!
sudo service cron reload
sudo service cron start
or

/etc/init.d/cron reload
/etc/init.d/cron start
sudo service cron reload
sudo service cron start
or

/etc/init.d/cron reload
/etc/init.d/cron start