2020年5月26日 星期二

【Linux】如何停止正在運行的crontab排程工作 to see and stop current running crontab tasks.

當 crontab排程已開始執行時,可透過以下方式找出執行緒並將運行中的排程停止

經由下面的語法可讓主機目前執行的排程工作可以容易閱讀
ps -o pid,sess,cmd afx | egrep -A20 "( |/)cron( -f)?$"
運行上面程式後會看到類似下面的畫面
1108  1108 cron
4288  1108 \_ CRON
4289  4289     \_ /bin/sh -c /path/to/my/crontab/accesscronjob.php
4290  4289         \_ /bin/bash /path/to/my/crontab/accesscronjob.php
.
.
.

第一欄是PID、第二欄位是Session ID、第三欄則是被排程啟動執行的程式。
若要刪除已經被排程啟動正在運行中的程式,可以藉由Session ID來kill所有相關的排程運行程式。

所以如下圖,若要停止正在運行的accesscronjob.php可以透過pkill語法來kill他的session ID "4289",如下
pkill -s 4289
參考網址

【PHP】關於$_SERVER['HTTP_HOST']在crontab上會失效的問題 Cron Job $_SERVER issue

在使用crontab排程時,因為程式內使用到了$_SERVER['HTTP_HOST']來擷取網址段,因而發生錯誤。

當時既透過網址執行時 $_SERVER['HTTP_HOST'] 可以正確取得域名,但是當相同一段程式透過crontab排程運行時,$_SERVER['HTTP_HOST']就無法成功讀取且會判斷為空值。

搜尋網路似乎還是有其他方法取代,先行紀錄之後再做研究。

2020年5月1日 星期五

【Unity3D】已經製作成prefab但是還留在Scene場境上的物件,可以刪除也可以disable

在unity上已經製作成prefab但是還留在Scene場境上的物件,可以直接刪除也可以選擇disable,讓物件在scene上消失,以防之後可能還會需要叫出來調整。

刪除或disable都可以

把物件disable的方式是  在Hierarchy視窗上點遠物件後,在inspector標籤下面物件名稱前的checkBox取消打勾即可(如下圖)。



取消打勾後物件就會從Scene上消失了。
要讓物件出現只要再把checkBox打勾就可以了

【Unity3D】使用OnTriggerEnter偵測碰撞並destroy物件時要注意的小地方

在語法上使用OnTriggerEnter語法偵測碰撞時,下列語法可以同時destroy自己跟與自身碰撞的物件

private void OnTriggerEnter(Collider other)
    {
        Destroy(gameObject); //當自己跟其他物件相撞時,destroy自己
        Destroy(other.gameObject); //同時也destroy其他物件
    }

這樣的方式在某些狀況下會有一點小問題,如下: 
譬如是射擊遊戲類的型態,當對面很多敵人物件飛過來時,
敵人物件通常也是做成prefab物件,所以裡面的基本元素是相同的來源。

那麼在遊戲畫面上兩個相同的基本元素也有可能相碰,這時使用上面的語法就會有一點矛盾的地方,也就是說當兩個相同的敵方元素相碰,會執行第一段destroy自己,然後再執行下一段destroy碰撞自己的其他物件,但是碰撞自己的其他物件其實也就是上一段已經destroy的同一個物件,這樣可能就會產生error。

在這種情況下只要不在這個物件上加上RigidBody Commpont就可以了,只要把RigidBody加在自己發射的飛彈上,讓飛彈碰撞到敵方物件時,摧毀自己也摧毀敵方。 這樣就可以避免上述的矛盾錯誤。

來源自:Unity tutorial:create with code live Week 3 | Session 4 - Spawn Animals at Intervals - April 9, 2020

9am PST 影片內 49分10秒處的說明