cron jobs crontab 排程教學

Linux Cron 指令

  • crontab -e 編輯排程 (edit cron)
  • crontab -r 移除排程 (remove cron)
  • crontab -l 顯示目前排程 (list cron)
  • crontab -u 改變排程的執行身分: crontab -u user filename

Cron 語法介紹


分鐘小時星期執行身份指令
0~590~231~31 (29,30)1~120~6
0是星期日,6是星期六
帳號/usr/bin/xxxx

Cron 範例 ( Example )

每5分鐘執行一次
*/5 * * * * root /usr/libexec/atrun
每5小時執行一次
* */5 * * * root /usr/libexec/atrun
1至20號每天執行一次
0 1 1-20 * * root /usr/libexec/atrun
當分針移到第5分時,執行此 cron
5 * * * * root /usr/libexec/atrun
當時針移到1點 1 分時,執行此 cron
1 1 * * * root /usr/libexec/atrun
每週一的1點1分,執行
1 1 * * 1 root /usr/libexec/atrun
2月29日時針到1點1分,執行 
1 1 29 2 * root /usr/libexec/atrun
8點到16點每5分鐘執行一次 cron
*/5 8-16 * * * root /usr/libexec/atrun

start cron

在 Linux 中,有個程式叫 crond ,意思是 cron daemon,大部分的 Linux 系統都會自動背景啟開這個程式,但是有時候會碰到 cron 沒有啟動的狀態,啟動方式如下:
! sudo service crond start
啟動之後,我會使用 tail -f /var/log/cron 這個指令來檢查 /etc/crontab 中的程式,是否有正確的被執行。

如何讓 cron job 自動 SCP 備份資料

首先我們要啟用 SSH Agent,有了 SSH Agent ,就能夠執行 scp 指令,並且自動通過輸入密碼的過程。
先在個人目錄下新增 .bash_profile ,並加入以下的內容,加入完成後得重新載入 .bash_profile , 使用指令「source ~/.bash_profile」,之後我們就可以用 start_agent 啟動 SSH Agent。
.bash_profile
  1. SSH_ENV=$HOME/.ssh/environment
  2. function start_agent {
  3. echo "Initialising new SSH agent..."
  4. /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
  5. echo succeeded
  6. chmod 600 ${SSH_ENV}
  7. . ${SSH_ENV} > /dev/null
  8. ssh-add id_rsa
  9. }
接下來修改 /etc/crontab ,將備份的指令輸入就可以了,如果想看執行的 Log ,可以在指令的最後補上 「 2>&1 &> ~/cronLog」,這樣程式就會將結果存到 ~/cronLog。
/etc/crontab auto scp
  1. 1 1 * * * userxx . /home/userxx/.ssh/environment && /usr/bin/scp puritys.me:~/var/backup/* ~/
這個範例是每天自動備份另一台機器的資料,但是時間一久 ,備份的資料會越來越多,最後硬碟會撐不住,所以又要加一個自動刪除舊檔的 cron job,下面這個範例會自動刪除五天前的 gz 備份檔。
/etc/crontab auto rm
  1. 40 1 * * * userxx /usr/bin/rm `date --date="-5 day" +\%Y-\%m-\%d`*.gz
日期運算另一種寫法 date -d "-1 day" +"%Y-%m-%d"

CSS hover 控制多個標籤動作樣式


一般情況

   
   #content .btn{
      color : #000 ; 
   }

   #content .btn : hover{
      color : #FFF;
   }


上述情況是 , 一個區塊自己滑過時控制自己的特效變化
假設一個區塊滑過 要控制多個區塊同時變化的時候呢?
   
   <div class='A'>
        <div class='B'></div>
        <div class='C'></div>
   </div>

當滑過 A 時 , B與C各自變化各自的效果

   
   .A : hover .B{
     color : #FFF;
   }

   .A : hover .C{
     color : #232AB;
   }

   //注意:CSS這裡 只能向下控制子級的標籤 , 以A層為基準, 向下控制自己旗下的B or C
   //注意:CSS只能控制子級,無法控制父級 , 父級控制目前可透過jquery

勞健保憑證安裝 , 一分鐘搞定

勞健保憑證,
對於不懂電腦的人還要額外安裝這些驅動
實在讓人感到很困擾


請參考以下說明,照步驟操作即可完成



1.瀏覽器請使用 IE



2.打開IE後在瀏覽器右上角開啟 "工具" -> "網際網路選項"
























3.打開後 選"安全性" -> "將等級調為中(最低)"




























4.下載 HiCOS卡片管理工具 並且安裝它 ( 點我下載 )

5.插上讀卡機 ( 此時IE頁面會請你安裝一些軟體 點擊安裝即可 )

6.下載SSL憑證安裝檔 並且安裝它  (  點我下載 )

7.下載健保卡元件安裝檔 並且安裝它  ( 點我下載 )

8.下載自然人憑證元件安裝檔 並且安裝它  ( 點我下載 )

注意勞健保現上加保 現在出新版本 要安裝新的元件才能正常運作
民國106年8月1日起領取自然人憑證的使用者,如於登入e化服務系統時出現錯誤訊息,請至新手上路/下載區/系統元件下載(https://edesk.bli.gov.tw/qa/main3.htm),安裝新版SmartPKI_Install元件。
入口位置
https://edesk.bli.gov.tw/cpa/

Laravel route rewrite nginx conf 設定


server {
    listen       80;
    server_name  localhost;

    root   /usr/share/nginx/html/S1/public;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php?$query_string;//rewrite key 
    }

    location ~ \.php$ {

        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
( 複製貼上時 restart nginx 如果異常 ,記得靠最上面對齊不要留空隙 )

LINE 魔境探險






















魔境探險有別於其他轉珠遊戲,
不論是在動畫,轉珠的技巧,角色的技能搭配都有很多不同的特點值得玩家來思考的一款休閒遊戲











































一進後,遊戲主畫面介紹
(1).目前遊戲的級數
(2).金幣數(用來扭蛋,做裝備,合成等 )
(3).紅寶石(用來鈕蛋,接關,購買特殊服裝等)
(4).紅利寶箱(每隔一段時間領取獎勵)
(5).遊戲目前的角色
好友看到的夥伴就是主角所使用的夥伴
有些網友作法是,在離開遊戲時,會故意留某一組隊分頁只留最強一隻
讓好友去使用
(6).每個角色都會搭配一個夥伴

以拿刀的主角來說,如果配給他是光屬性夥伴,那他在遊戲就屬於光屬性
(7).活動,刷做裝備的寶石,或是特定人物,強化相關物品入手
(8).任務,賺錢的蠻好途徑之一,打倒特定敵人獲得金幣
強化夥伴需要大量的金幣,所以也是很重要的囉!
(9).隊伍(編排或選擇每一個角色所使用的夥伴,與強化)
(10).工房(做角色裝備的地方)
(11).好友(這遊戲很耗費體力
一定要多加好友,互相體力
(12).扭蛋(初期建議多邀一些好友,拿寶石抽夥伴)
我自己而言是最好各種屬性各一隻
有些網友會四個角色都配同一種屬性,也是一種玩法



這遊戲很大的特點就是,每一個角色搭配的夥伴屬性不同
所表現的動畫,與攻擊特點也就不同
,何時要暈,何時要降防禦
都可以透過玩家自由搭配來表現在戰鬥中






底下來介紹玩這遊戲的技巧

1.裝備一定要製作它是視為角色基本的素質,不然在過關卡時會非常吃力
而且會卡關






























2.夥伴要強化

當打不過敵人時,除了屬性與技巧的問題外,就是要提升夥伴的等級遊戲中的總血量(角色的血+夥伴的血量)
攻擊(角色的攻擊力+夥伴的攻擊力)
很多時候夥伴沒強化,血不夠怪打那麼一下,直接就秒殺 來不及下一輪補血
所以至少血量要能撐過1-2輪的攻擊
夥伴強化時,注意,強化的素材選擇跟自己同屬性的,經驗值會是1.5倍









3.角色的技能累積

角色技能的累積的很重要,戰鬥最後,技能可以施展時
往往是一個關鍵,例如一些技能可以讓對手暈眩兩回合
或是加一個%的攻擊力,都可以扭轉戰局

這裡順便說一下人物的攻擊方式
攻擊方式隨著你珠子屬性連消的數量會有所不同

一般屬性消珠子低於12以下
劍士(普攻1下)
弓(普攻1下)
魔法師(普攻1下)
術士(普攻1下)

一般屬性消珠子高於12以上劍士(連斬2下)
弓(連射2下)
魔法師(群體攻擊5下)
術士(群體攻擊1下)

當使用技能攻擊時,也會依照角色的特性做攻擊











4.Combo數與SUMMON
Combo影響角色的攻擊力乘以一個倍數
Combo數越多角色的攻擊力越強(廢話)

一開始進行戰鬥時 Combo數達10就會累積滿
SUMMON( 後面幾輪 則是要累積到 20 Combo )
也可以利用夥伴開大絕進行攻擊

招喚出來的夥伴,當光圈縮到最小時 點螢幕則會產生perfect 最大攻擊力
( 1600% ~ 17xx%)
這時候會發現某一些夥伴設計上 段數比其他人高很多
打的也比其他人更痛
像畢強,柯比






5.各種屬性金屬凍凍活動一定要打
每週在特定時間都有各種屬性的金屬凍凍(強化素材)
除了過關以外,請把體力都存起來
留著打素材來升級夥伴是很重要的!




6.轉珠技巧有時候運氣不好,拿到的珠子連續很少,
這時候盡力而為,盡量讓"有效"的珠子連續排在一起
有效的意思是,你的隊伍假設沒有水屬性,
就不用刻意去排水屬性連珠
你只能賭連續之後消掉掉下來的新珠子能造成連線

底下這技巧
利用消去某一連續的珠子,讓上面掉下來珠子與底下又造成一個連線








7.排夥伴隊伍的一些小技巧

有時候遇到的敵人真的很強
動不動就可以打掉你一半的血 , 兩隻各打一下就快掛了

這時候可以做的事 , 先集中消滅一隻

相克的屬性,攻擊力高的盡量放在法師(兔子)欄位
因為兔子是群體攻擊,一次出現多隻怪時,不可能一隻一隻打
這時就要靠法師



注意看上圖 , 兔子配暗屬性夥伴克敵人,
術士配光屬性(當展開障璧時)可以有效抵擋光屬性攻擊
(雖然可能也活不到那時了)

劍士配風屬性,技能可以讓敵人沉默兩回合
可以趁機補血兼攻擊











8.遇到很強的人戰略
這邊提供兩種作法
一個不對,就是等著滅團,就算你等級高血很多,也是過的辛苦


作法1
先集中攻擊一隻 --> 連珠成大補血 --> 再繼續攻擊

作法2
先集中攻擊一隻 --> 使用夥伴 --> 再繼續攻擊 --> 連珠成大補血
(想辦法弄到10combo)




































9.Fever的小技巧
當你使用夥伴在很有可能會直接秒殺敵人時
使用前請先使用掉 在這一回合能 轉動的 連續2個次數
當敵人秒殺後 , 珠子現狀原封不動的繼續到下一個回合
等於你有五次連珠的機會



10.多利用好友的夥伴

加入LINE群組,利用好友的夥伴幫忙戰鬥
當然也要記得選對屬性









11.戰鬥後的獎勵
注意快打死敵人時,記得留一點血給夥伴做ENDING
如果一次無法完成,等可以待之後等級高時,再來完成















12.夥伴的強化
除了遊戲內的活動,抽扭蛋來強化夥伴之外
還可以在某些關卡打到經驗值超高的夥伴(93關 , 113關 )
都有經驗值不錯的





ajax 判斷權限登出技巧


此篇為備望錄
紀錄使用ajax時,logout登出後,ajax判斷轉跳



這邊注意,我們配合laravel在 http/middleware/CheckPower
針對 ajax 做補強


















這裡會有一個問題就是,當ajax收到這段reload 的 script
會在不同的使用方式下在不同的地方收到
1.如果controller已經對 轉出給ajax使用的data已 json_encode , 則會在 success 中收到
2.如果controller只有json_decode,就會在ajax的error收到


因此我們對收到susccess判斷一下收到的訊息
ajaxObj.success = function( data , textStatus,jqXHR )
{
    if( data.match('reload') )
    {
       document.write(data);
     }


如果是只有json_decode,就會從error出來,這時只需將結果整段印出
ajaxObj.error=function(XMLHttpRequest, textStatus, errorThrown)
{
    document.write(XMLHttpRequest.responseText);
}

log紀錄檔使用





此篇為laravel log紀錄備忘錄


1.寫入檔案格式

laravel 寫檔格式分為幾種 可以選擇
config/app.php做設定
/*
|--------------------------------------------------------------------------
| Logging Configuration
|--------------------------------------------------------------------------
|
| Here you may configure the log settings for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Settings: "single", "daily", "syslog", "errorlog"
|
*/

'log' => 'daily',



上面所設的'log' => 'daily' or 'single'與否關係到 vendor/compiled.php
要使用那一個function邏輯

protected function configureSingleHandler(Application $app, Writer $log)

protected function configureDailyHandler(Application $app, Writer $log)



當我們想強迫指定log存放位置可以使用以下
但注意如果未修改 compiled.php 就會兩邊各存一份 log
if( Config::get('app.log_on'))
\Log::useDailyFiles(Config::get('app.log_path').Config::get('app.log_filename'));


那我們今天想改變我們寫檔結構
儲存的分資料夾的方式去儲存
且每一小時儲存一次

protected function configureSingleHandler(Application $app, Writer $log)
{
   $URL=dirname(dirname(__FILE__))."/storage/logs/";
   if(!is_dir($URL).date("Y")){
   mkdir($URL.date("Y"),0777);
   chmod($URL.date("Y"), 0777);
   if(!is_dir($URL).date("Y")."/".date("m")){
      mkdir( $URL.date("Y")."/".date("m"),0777);
      chmod( $URL.date("Y")."/".date("m"),0777);
      if(!is_dir($URL).date("Y")."/".date("m")."/".date("d")){
         mkdir( $URL.date("Y")."/".date("m")."/".date("d"),0777);
         chmod( $URL.date("Y")."/".date("m")."/".date("d"),0777);
            }
         }
   }

    $log->useFiles($app->storagePath() . '/logs/'.date("Y")."/".date("m")."/".date("d").'/'.date("H").'.log');
}


protected function configureDailyHandler(Application $app, Writer $log)
{
   $URL=dirname(dirname(__FILE__))."/storage/logs/";
   if(!is_dir($URL).date("Y")){
      mkdir($URL.date("Y"),0777);
      chmod($URL.date("Y"), 0777);
      if(!is_dir($URL).date("Y")."/".date("m").date("d")){
         mkdir( $URL.date("Y")."/".date("m").date("d"),0777);
         chmod( $URL.date("Y")."/".date("m").date("d"),0777);
         }
      }
   $log->useFiles($app->storagePath() . '/logs/'.date("Y")."/".date("m").date("d").'/'.date("H").'.log');

//    $log->useDailyFiles($app->storagePath() . '/logs/laravel-'.date("Y-m-d H").'.log',
5);
}


jsmepg 畫布 canvas 視訊串流實作





在linux上必要安裝
1.下載 jsmpeg
2.安裝 node
3.安裝 websocket
4.安裝 npm
5.安裝 ffmpeg



運作流程 :















1.安裝npm
yum install npm

2.安裝npm
npm install ws

3.安裝 nodejs
npm install node

4.檢查看看是否真的安裝好
node -v

5.下載jsmpeg
npm install jsmpeg
or
git clone https://github.com/phoboslab/jsmpeg.git


6.記得開通port
iptables -I INPUT -p tcp --dport 8888 -j ACCEPT
iptables -I INPUT -p tcp --dport 8082 -j ACCEPT
iptables -I INPUT -p tcp --dport 8084 -j ACCEPT


7.執行jsmpeg (server)
node /root/jsmpeg/stream-server.js 8888 8082 8084
8888 = 認證代號
8082 = 接收視訊的port
8084 = 傳送視訊的port


8.跑起來後確認是否真的有跑在處理程序裡
ps -aux | grep node

9.安裝 ffmpeg
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
yum -y install epel-release && rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5. el7.nux.noarch.rpm
yum --enablerepo=nux-dextop list smplayer shutter
yum install ffmpeg


10.假設安裝後不知道檔案跑去那了?
find / -name ffmpeg


11.使用ffmpeg轉發視訊至jsmpeg
ffmpeg -r 25 -y -probesize 70 -i "rtmp://63.221.136.66/live/phone01sd" -an -f mpeg1video -q:v 1 -s 1280x720 -r 25 -probesize 70 http://10.20.30.80:8082/8888/1280/720/



參考 :


https://segmentfault.com/a/1190000000392586
http://weheart.digital/build-simple-live-streaming-solution/
http://tonyhack.familyds.net/wordpress/?p=4297


https://www.exratione.com/2013/06/websockets-over-ssl-with-nodejs-and-nginx/


http://www.streaminglearningcenter.com/blogs/dash-or-hls-which-is-the-best-format-today.html
https://support.jwplayer.com/customer/portal/articles/1430349-about-rtmp-streaming
https://support.jwplayer.com/customer/en/portal/articles/2020482-about-dash-streaming
https://support.jwplayer.com/customer/en/portal/articles/1430189-about-hls-streaming
https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/Live_streaming_web_audio_and_video



https://imququ.com/post/html5-live-player-1.html
https://imququ.com/post/html5-live-player-2.html
https://www.v2ex.com/t/226318
http://gka.github.io/canvid/

https://imququ.com/post/html5-live-player-3.html
https://janus.conf.meetecho.com/screensharingtest.html
https://www.zhihu.com/question/25497090

jquery & ajax 呼叫跨網域 xml 請求 出現 Access-Control-Allow-Origin

使用 jquery & ajax
請求 跨網域頁面時瀏覽器cosole會出現警告

Access-Control-Allow-Origin



此時在提供頁面的端口加上web.config

內容呈現如下重啟即可

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>

SVG 實作

$(document).ready(function () {

r1();

});

function r1()
{
  var rc = "";
  var x = 0 ;
  var y = 0 ;
     var c1 = "";
     var c2 = "";

     for( i = 0 ; i < 100 ; i++ )
     {

y = (i%6)*36 ;

z = Math.floor((Math.random() * 10) + 1)

if( z%3==0){c1 = "red"; c2="莊";}
if( z%3==1){c1 = "blue";c2="閒";}
if( z%3==2){c1 = "green";c2="和";}


rc +="<svg  id = 'svg1'  style='left: "+ x +"px; top:"+ y +"px; position: absolute ; z-index: 999;visibility:visible'>";
rc +="<circle cx='20' cy='20' r='18' stroke='green' stroke-width='0' fill="+ c1 +" />";
rc+="<text style='fill:white;'font-size='24' font-family='SimHei' x='9' y='28' width='0' height='0'>"+c2+"</text>";
rc+="</svg>";


if( (i+1)%6 == 0 )x+=36;
}

$('#roadcontent').append(rc);





<div id= "roadcontent"></div>


https://jsfiddle.net/c9rmzb8h/#

IE11與edge flash異常無法進入問題




此為備忘錄,記錄IE11&Edge開啟特定結構flash無法進入問題

問題發生狀況描述:

一開始進入flash讀取後進入主題後,上一頁再進入一次flash



原因:flash設計的影格結構有關係,
第一個影格為loading,
第二個影格為主題影格
這樣的結構會產生這樣的異常


則flash此時會無法正常進入主題








修正方法:
在flash內第一個影格加入
stop();
play();
強制換一個影格跑
第二個影格內
stop();

柬埔寨 - popei


此篇為備忘錄
記載在柬埔寨出差時一些生活
給未來要去的同事一個小小參考



去程時候很幸運
搭到華航最新型的飛機
整體蠻有質感的
操作螢幕也比之前更順暢
但服務態度跟餐點好像沒有更著提升























曼谷機場























馬上來到機場裡的全家,看到包著培根的熱狗























到那都要買一瓶的養樂多XD
比較看看,喝起來跟台灣一樣,瓶身比較高瘦一點






















下面這張圖可以看到
要到這個 popei 大概要經過 3 小時車程
我們是坐商旅車前往
聽說也可以自坐計程車,價格更便宜,但可能安全上有一定風險
































popei是一個位於泰國跟柬埔寨邊界小鄉村?
裡面沒有什麼高樓大廈,只有許多的小攤小販,市場,超商,賭場,飯店
大多來這都是觀光客居多
有從美國來的,或是泰國過來的
來這裡小賭怡情?


























從泰國入境到柬埔寨要先辦入境簽
手續很簡單
跟著下圖路標指示
入境入口隱藏在市場攤販之中
沒有來過的人根本不會知道喔 !!



入境簽基本網路上都查的資料
現在已經不用填表格
只要準備好1600泰幣跟2張大頭近照








一入境柬埔寨,很快就有人來接應我>們
坐著一台類似底下這樣圖片的車子
才大概30秒路程吧 就到我們目的地







至於住宿的地方,看看地圖大概幾公里外有一個地方叫
Star Mainsion
每次上下班時候,就要20元泰幣搭當地的機車載到你到目地的
不論到那都20泰幣(身上要先準備好),找錢也是可以
但感覺對他們很麻煩

當然要用走路的,邊走邊逛也是很不錯
可惜...太陽太大了,氣溫太高,約35-40度左右
出去沒一下就流很多汗
防曬要做好










Laravel -NotFoundHttpException 例外頁面導向



Laravel 預設例外路由會直接把錯誤訊息印到頁面上













public function render($request, Exception $e)
{
       return parent::render($request, $e);

}//app/Exceptions/Handler.php

將原本句子改為以下,轉到指定的路由去

public function render($request, Exception $e)
{
    \return Redirect::to('/');

}//app/Exceptions/Handler.php