[Website] CodeIgniter 當機處理

今天發現網站掛掉了,找到以下的錯誤訊息:

[Sun Oct 27 13:32:44.124886 2019] [:error] [pid 8099:tid 139960652896000] [client 187.101.125.238:38846] 
SoftException in Application.cpp:542: Could not execute script "/home/******/public_html/******/index.php"
[Sun Oct 27 13:32:44.125042 2019] [:error] [pid 8099:tid 139960652896000] [client 187.101.125.238:38846] 
Caused by SystemException in API_Linux.cpp:444: execve() for program "/opt/alt/php70/usr/bin/php-cgi" failed: Permission denied
[Sun Oct 27 13:32:44.125065 2019] [core:error] [pid 8099:tid 139960652896000] [client 187.101.125.238:38846] 
End of script output before headers: index.php

看起來是主要是權限的問題,解決方法是透過以下的指令開放 php-cgi 程式的執行權限:

chmod 755 /opt/alt/php70/usr/bin/php-cgi

PS: 這邊值得一提的是以上的錯誤資訊要去哪裡找到這個 Internal Server 500 Error 的訊息!以上的錯誤訊息可以到 /usr/local/apache/domlogs/prd.xxxxxx.xxxxxx.error.log

接下來還是繼續有發生問題:

發現權限會不定時地修正回去!所以網站就會有落入 Internal Server Error 的問題中。嘗試透過更改 php 的版本數解決這裡的問題,我們把版本從 Php 7.0 改到 Php 7.1 之後結果以上的錯誤還是繼續出現,不太懂為什麼會繼續使用 /opt/alt/php70 裡面的原始程式碼?同樣在 PHP 伺服器上跑的網站都沒有類似的問題!所以筆者在想應該是要去修改 CodeIgniter 程式的 PHP 依賴!目前在 Server 上有的 PHP 選項為:

/usr/local/bin/php 
/usr/local/bin/php-cgi 
/usr/local/bin/php-config 

/usr/local/cwp/php71/bin/php 
/usr/local/cwp/php71/bin/php-cgi 
/usr/local/cwp/php71/bin/php-config 

/opt/alt/php70/usr/bin/php 
/opt/alt/php70/usr/bin/php-cgi 
/opt/alt/php70/usr/bin/php-config

暫時的解決辦法 -> 創造一個 symbolic link 放在 /opt/alt/php70/usr/bin 的資料夾裡面取代 php-cgi 程式!輸入以下程式碼:

cd /opt/alt/php70/usr/bin 
mv php-cgi php-cgi_tmp 
ln -s /usr/local/cwp/php/bin/php-cgi php-cgi

結果如下:

-r--r--r-- 1 root root      857 Feb  1  2019 pear 
-r--r--r-- 1 root root      878 Feb  1  2019 peardev 
-r--r--r-- 1 root root      794 Feb  1  2019 pecl 
lrwxrwxrwx 1 root root        9 Feb  1  2019 phar -> phar.phar 
-r--r--r-- 1 root root    14837 Feb  1  2019 phar.phar 
-r--r--r-- 1 root root 43729760 Feb  1  2019 php 
lrwxrwxrwx 1 root root       30 Nov  2 03:38 php-cgi -> /usr/local/cwp/php/bin/php-cgi 
-r--r--r-- 1 root root 43570520 Feb  1  2019 php-cgi_tmp 
-r--r--r-- 1 root root     3603 Feb  1  2019 php-config 
-r--r--r-- 1 root root 44573856 Feb  1  2019 phpdbg 
-r--r--r-- 1 root root     4575 Feb  1  2019 phpize
利用 symbolic link 想要避開權限修改之後還是有問題發:

於是我們繼續查看 /usr/local/apache/domlogs/prd.xxxxxx.xxxxxx.error.log 的紀錄檔,發現錯誤都是在早上 3:25 分左右開始產生的,於是我們推斷權限應該是被 cron 的程式定期修改掉了,查看 /var/log/cron

Nov  4 03:25:01 vmi233311 anacron[19941]: Job `cron.daily' started
Nov  4 03:25:01 vmi233311 run-parts(/etc/cron.daily)[20856]: starting certwatch
Nov  4 03:25:01 vmi233311 run-parts(/etc/cron.daily)[20863]: finished certwatch
Nov  4 03:25:01 vmi233311 run-parts(/etc/cron.daily)[20856]: starting csget
Nov  4 03:25:01 vmi233311 run-parts(/etc/cron.daily)[20877]: finished csget
Nov  4 03:25:01 vmi233311 run-parts(/etc/cron.daily)[20856]: starting cwp
Nov  4 03:25:41 vmi233311 run-parts(/etc/cron.daily)[21276]: finished cwp
Nov  4 03:25:41 vmi233311 run-parts(/etc/cron.daily)[20856]: starting cwp_acme.sh
Nov  4 03:25:43 vmi233311 run-parts(/etc/cron.daily)[21764]: finished cwp_acme.sh
Nov  4 03:25:43 vmi233311 run-parts(/etc/cron.daily)[20856]: starting cwp_bandwidth
Nov  4 03:25:46 vmi233311 run-parts(/etc/cron.daily)[21817]: finished cwp_bandwidth
Nov  4 03:25:46 vmi233311 run-parts(/etc/cron.daily)[20856]: starting logrotate
Nov  4 03:25:46 vmi233311 run-parts(/etc/cron.daily)[21824]: finished logrotate
Nov  4 03:25:46 vmi233311 run-parts(/etc/cron.daily)[20856]: starting man-db.cron
Nov  4 03:25:46 vmi233311 run-parts(/etc/cron.daily)[21835]: finished man-db.cron
Nov  4 03:25:46 vmi233311 run-parts(/etc/cron.daily)[20856]: starting mlocate
Nov  4 03:25:57 vmi233311 run-parts(/etc/cron.daily)[21850]: finished mlocate
Nov  4 03:25:57 vmi233311 anacron[19941]: Job `cron.daily' terminated (produced output)

發現 cron.daily 的確是在早上的 3:25 分左右被執行的,鎖定並執行 cwp 程式發現的確是此程式造成權限被修改!查看內部之後發現他是執行以下兩行程式:

/usr/local/cwp/php71/bin/php -d max_execution_time=1000000 -q /usr/local/cwpsrv/htdocs/resources/admin/include/cron.php
/usr/local/cwp/php71/bin/php -d max_execution_time=1000000 -q /usr/local/cwpsrv/htdocs/resources/admin/include/cron_backup.php

查看 cron.php 之後發現裡面是有編碼保護過的,先執行 bash cwp 

Update Server Packages

chmod: cannot access ‘/opt/alt/php*/usr/sbin/*’: No such file or directory
ls: cannot access php-fpm*: No such file or directory
Redirecting to /bin/systemctl restart cwpsrv.service
Redirecting to /bin/systemctl restart httpd.service

Date which backup script is using: 2019-11-04 06:03:59

在執行 bash cwp 之後發現權限就被改掉了,所以暫時處理的方法是把 cron.daily 的第一行給 comment 掉,但是 restart cwpsrc.service 跟 restart httpd.service 每天的 重開好像就會受到影響,具體的影響需要繼續觀察!

發現檸檬爸的伺服器已經由 anacron 做排成的管理了,有關 anacron 的介紹可以參考以下連結:https://ithelp.ithome.com.tw/articles/10077229