[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