syslogphp
1.使用iotop命令
使用該命令有個條件,Linux內核要高於2.6.20的版本,版本過低則沒有此命令,執行效果如下圖所示:
2:block_mp方法
首先,關閉syslog服務,然後開啟block_mp,最後正則表達式提取dmesg信息。
/etc/init.d/syslog stop
echo 1 > /proc/sys/vm/block_mp
dmesg | egrep "READ|WRITE|dirtied" | egrep -o '([a-zA-Z]*)' | sort | uniq -c | sort -rn | head
執行結果如下圖所示:
注意:操作完成後請關閉block_mp和啟動syslog
echo 0 > /proc/sys/vm/block_mp #關閉block_mp
/etc/init.d/syslog start #啟動syslog
❷ 如何在linux系統下打造適合自己的PHP開發環境
一、系統約定
軟體源代碼包存放位置:/usr/local/src
源碼包編譯安裝位置(prefix):/usr/local/software_name
腳本以及維護程序存放位置:/usr/local/sbin
Mysql 資料庫位置:/var/lib/MySQL(可按情況設置)
Apache 網站根目錄:/home/www/wwwroot(可按情況設置)
Apache 虛擬主機日誌根目錄:/home/www/logs(可按情況設置)
Apache 運行賬戶:www:www
二、系統環境部署及調整
1. 檢查系統是否正常
1
2
3
4
# more /var/log/messages(檢查有無系統級錯誤信息)
# dmesg(檢查硬體設備是否有錯誤信息)
# ifconfig(檢查網卡設置是否正確)
# ping www.163.com(檢查網路是否正常)
2. 關閉不需要的服務
1
2
3
4
5
6
7
8
9
10
# ntsysv
以下僅列出需要啟動的服務,未列出的服務一律推薦關閉:
atd
crond
irqbalance
microcode_ctl
network
sendmail
sshd
syslog
3. 重新啟動系統
1
# init 6
4. 配置 vim
1
# vi /root/.bashrc
在 alias mv='mv -i' 下面添加一行:alias vi='vim' 保存退出。
1
# echo 'syntax on' > /root/.vimrc
5. 使用 yum 程序安裝所需開發包(以下為標準的 RPM 包名稱)
1
2
# yum install ntp vim-enhanced gcc gcc-c++ gcc-g77 flex
bison autoconf automake bzip2-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel kerne
6. 定時校正伺服器時鍾,定時與中國國家授時中心授時伺服器同步
1
# crontab -e
加入一行:
1
*/30 * * * * ntpdate 210.72.145.44
7. 源碼編譯安裝所需包 (Source)
需要下載的文件
1
2
3
4
5
6
7
gd-2.0.34.tar.gz
libxml2-2.6.30.tar.bz2
libmcrypt-2.5.8.tar.bz2
cronolog-1.7.0-beta.tar.gz
openssl-0.9.8e.tar.gz (可選)
openssl-0.9.8e.tar.gz (可選)
7.1 GD2
1
2
3
4
5
6
# cd /usr/local/src
# tar xzvf gd-2.0.34.tar.gz
# cd gd-2.0.34
# ./configure --prefix=/usr/local/gd2
# make
# make install
7.2 LibXML2
1
2
3
4
5
6
# cd /usr/local/src
# tar xjvf libxml2-2.6.30.tar.bz2
# cd libxml2-2.6.30
# ./configure --prefix=/usr/local/libxml2
# make
# make install
7.3 LibMcrypt
1
2
3
4
5
6
# cd /usr/local/src
# tar xjvf libmcrypt-2.5.8.tar.bz2
# cd libmcrypt-2.5.8
# ./configure –prefix=/usr/local/libmcrypt
# make
# make install
7.4 Apache日誌截斷程序
1
2
3
4
5
6
# cd /usr/local/src
# tar xzvf cronolog-1.7.0-beta.tar.gz
# cd cronolog-1.7.0-beta
# ./configure –prefix=/usr/local/cronolog
# make
# make install
8. 升級OpenSSL和OpenSSH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# cd /usr/local/src
# tar xzvf openssl-0.9.8e.tar.gz
# cd openssl-0.9.8e
# ./config --prefix=/usr/local/openssl
# make
# make test
# make install
# cd ..
# tar xzvf openssh-4.7p1.tar.gz
# cd openssh-4.7p1
# ./configure \
"--prefix=/usr" \
"--with-pam" \
"--with-zlib" \
"--sysconfdir=/etc/ssh" \
"--with-ssl-dir=/usr/local/openssl" \
"--with-md5-passwords"
# make
# make install
(1)禁用 SSH V1 協議 找到:
1
#Protocol 2,1
改為:
1
Protocol 2
(2)禁止root直接登錄,此處先建立一個普通系統用戶:
1
2
# useradd username
# passwd username
找到:
1
#PermitRootLogin yes
改為:
1
PermitRootLogin no
(3)禁用伺服器端GSSAPI,找到以下兩行,並將它們注釋:
1
2
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
(4)禁用 DNS 名稱解析,找到:
1
#UseDNS yes
改為:
1
UseDNS no
(5)禁用客戶端 GSSAPI
1
# vi /etc/ssh/ssh_config
找到:
1
GSSAPIAuthentication yes
將這行注釋掉。
最後,確認修改正確後重新啟動 SSH 服務
1
2
# service sshd restart
# ssh -v
確認 OpenSSH 以及 OpenSSL 版本正確。
三、編譯安裝L.A.M.P環境
1. 下載軟體
1
# cd /usr/local/src
下載文件mysql,apache,php,請到下面網址下載相應軟體
1
2
3
http://www.apache.org/ (推薦版本:2.2.21)
http://www.php.net/ (推薦版本:5.2.17)
http://www.mysql.com/
2. 編譯安裝MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# tar xzvf MySQL-5.0.45-linux-i686-glibc23.tar.gz
# mv MySQL-5.0.45-linux-i686-glibc23 /usr/local/
# ln -s /usr/local/ MySQL-5.0.45-linux-i686-glibc23 /usr/local/MySQL
# useradd MySQL
# chown -R MySQL:root /usr/local/MySQL/
# cd /usr/local/MySQL
# ./scripts/MySQL_install_db --user=MySQL
# cp ./support-files/MySQL.server /etc/rc.d/init.d/MySQLd
# chown root:root /etc/rc.d/init.d/MySQLd
# chmod 755 /etc/rc.d/init.d/MySQLd
# chkconfig --add MySQLd
# chkconfig --level 3 5 MySQLd on
# cp ./support-files/my-huge.cnf /etc/my.cnf
# mv /usr/local/MySQL/data /var/lib/MySQL
# chown -R MySQL:MySQL /var/lib/MySQL/
# vi /etc/my.cnf
3. 編譯安裝Apache
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# cd /usr/local/src
# tar xjvf httpd-2.2.21.tar.bz2
# cd httpd-2.2.21
# ./configure \
"--prefix=/usr/local/apache2" \
"--with-included-apr" \
"--enable-so" \
"--enable-deflate=shared" \
"--enable-expires=shared" \
"--enable-rewrite=shared" \
"--enable-static-support" \
"--disable-userdir"
# make
# make install
# echo '/usr/local/apache2/bin/apachectl start ' >> /etc/rc.local
4. 編譯安裝PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# cd /usr/local/src
# tar xjvf php-5.2.17.tar.bz2
# cd php-5.2.17
# ./configure \
"--prefix=/usr/local/php" \
"--with-apxs2=/usr/local/apache2/bin/apxs" \
"--with-config-file-path=/usr/local/php/etc" \
"--with-MySQL=/usr/local/MySQL" \
"--with-libxml-dir=/usr/local/libxml2" \
"--with-gd=/usr/local/gd2" \
"--with-jpeg-dir" \
"--with-png-dir" \
"--with-bz2" \
"--with-freetype-dir" \
"--with-iconv-dir" \
"--with-zlib-dir " \
"--with-openssl=/usr/local/openssl" \
"--with-mcrypt=/usr/local/libmcrypt" \
"--enable-soap" \
"--enable-gd-native-ttf" \
"--enable-ftp" \
"--enable-mbstring" \
"--enable-exif" \
"--disable-ipv6" \
"--disable-cgi" \
"--disable-cli"
# make
# make install
# mkdir /usr/local/php/etc
# cp php.ini-dist /usr/local/php/etc/php.ini
5. 整合Apache與PHPP
1
# vi /usr/local/apache2/conf/httpd.conf
找到:
1
AddType application/x-gzip .gz .tgz
在該行下面添加
1
AddType application/x-httpd-php .php
找到:
1
DirectoryIndex index.html
將該行改為
1
DirectoryIndex index.html index.htm index.php
找到:
1
2
3
4
#Include conf/extra/httpd-mpm.conf
#Include conf/extra/httpd-info.conf
#Include conf/extra/httpd-vhosts.conf
#Include conf/extra/httpd-default.conf
去掉前面的「#」號,取消注釋。注意:以上 4 個擴展配置文件中的設置請按照相關原則進行合理配置!修改完成後保存退出。
1
# /usr/local/apache2/bin/apachectl restart
6. 查看確認L.A.M.P環境信息、提升 PHP 安全性
在網站根目錄放置 phpinfo.php 腳本,檢查phpinfo中的各項信息是否正確。
確認 PHP 能夠正常工作後,在 php.ini 中進行設置提升 PHP 安全性。
1
# vi /etc/php.ini
找到:
1
disable_functions =
設置為:
1
2
phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,
ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server
❸ 如何在linux下安裝多個不同版本的PHP
Linux下部署php多版本共存
背景說明
自php7問世,身為最新版本控的我馬上升級體驗,但是由於伺服器上還有舊程序在運行,只好部署一個php多版本共存環境。
現有環境是lnmp
- CentOS 6.7
- nginx 1.10.1
- mariadb-10.0.26
- php 7.0.8
為了更好兼容舊的php程序,推薦使用5.4.45. 主要是兼容mysql擴展。
開始安裝
首先要下載php-5.4.45.tar.gz源碼包。
通過源碼安裝
# tar xzvf php-5.4.45.tar.gz
# cd php-5.4.45
# ./configure --prefix=/usr/local/php54 --with-config-file-path=/usr/local/php54/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir=/usr/local/freetype --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo --enable-intl --with-xsl
# make ZEND_EXTRA_LIBS='-liconv'
# make install
# cp php.ini-proction /usr/local/php/etc/php.ini
------------------------------------------------------------------------------------------------
php.ini 配置
post_max_size = 50M
upload_max_filesize = 50M
date.timezone = PRC
short_open_tag = On
cgi.fix_pathinfo=0
max_execution_time = 300
disable_functions=passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server
------------------------------------------------------------------------------------------------
php-fpm.conf 配置
------------------------------
# vim /usr/local/php/etc/php-fpm.conf1
[global]
pid = /usr/local/php54/var/run/php-fpm.pid
error_log = /usr/local/php54/var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php54-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1:9001
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 40
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 40
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log
----------------------------------------------------------------------------------
啟動 php-fpm
# cp sapi/fpm/init.d.php-fpm /etc/init.d/php54-fpm
# chmod +x /etc/init.d/php54-fpm
# /etc/init.d/php54-fpm start
-------------------------------------------------------------------------------------------
修改nginx配置,對需要的服務配置使用php-5.4.45
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php54-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
----------------------------------------------------------------------------------------
配置php-5.4.45 的php54-fpm 開機自動啟動
# chkconfig --add php54-fpm
# chkconfig php54-fpm on
❹ 請教syslog-ng如何實時插入到資料庫
我在使用syslog-ng搭建日誌伺服器中已經講了如何將syslog-ng配置為中心日誌伺服器,下面介紹如何將syslogng的日誌寫入mysql資料庫
系統:Gentoo-2007
1、修改/etc/syslog-ng/syslog-ng.conf,添加
CODE:
source s_remote {
udp(ip(0.0.0.0) port(514));
};
destination r_mysql {
program("/usr/bin/mysql -usyslogadmin -psyslogadmin syslog < /var/log/mysql.pipe");
pipe("/var/log/mysql.pipe"
template("INSERT INTO logs
(host, facility, priority, level, tag, datetime, program, msg)
VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC',
'$PROGRAM', '$MSG' );\n") template-escape(yes));
};
log { source(s_remote); destination(r_mysql); };
2、建立mysql.pipe文件按
#mkfifo /var/log/mysql.pipe
3、重新啟動syslog-ng
#/etc/init.d/syslog-ng restart
這種方法如果結合phpsyslogng一起使用,就可以在瀏覽器中對日誌進行進一步的過濾和查看,非常方便。
❺ 如何將syslogng的日誌寫入MySQL資料庫
轉載我在使用syslog-ng搭建日誌伺服器中已經講了如何將syslog-ng配置為中心日誌伺服器,下面介紹如何將syslogng的日誌寫入mysql資料庫
系統:Gentoo-2007
1、修改/etc/syslog-ng/syslog-ng.conf,添加
CODE:
source s_remote {
udp(ip(0.0.0.0) port(514));
};
destination r_mysql {
program("/usr/bin/mysql -usyslogadmin -psyslogadmin syslog < /var/log/mysql.pipe");
pipe("/var/log/mysql.pipe"
template("INSERT INTO logs
(host, facility, priority, level, tag, datetime, program, msg)
VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC',
'$PROGRAM', '$MSG' );\n") template-escape(yes));
};
log { source(s_remote); destination(r_mysql); };
2、建立mysql.pipe文件按
#mkfifo /var/log/mysql.pipe
3、重新啟動syslog-ng
#/etc/init.d/syslog-ng restart
這種方法如果結合phpsyslogng一起使用,就可以在瀏覽器中對日誌進行進一步的過濾和查看,非常方便。
❻ 記錄PHP錯誤日誌 display_errors與log_errors的區別
display_errors
錯誤回顯,一般常用語開發模式,但是很多應用在正式環境中也忘記了關閉此選項。錯誤回顯可以暴露出非常多的敏感信息,為攻擊者下一步攻擊提供便利。推薦關閉此選項。
display_errors
=
On
開啟狀態下,若出現錯誤,則報錯,出現錯誤提示
dispaly_errors
=
Off
關閉狀態下,若出現錯誤,則提示:伺服器錯誤。但是不會出現錯誤提示
log_errors
在正式環境下用這個就行了,把錯誤信息記錄在日誌里。正好可以關閉錯誤回顯。
對於PHP開發人員來說,一旦某個產品投入使用,那麼第一件事就是應該將display_errors選項關閉,以免因為這些錯誤所透露的路徑、資料庫連接、數據表等信息而遭到黑客攻擊。
某個產品投入使用後,難免會有錯誤信息,那麼如何記錄這些對開發人員非常有用的信息呢?
將PHP的log_errors開啟即可,默認是記錄到WEB伺服器的日誌文件里,比如Apache的error.log文件。
當然也可以記錄錯誤日誌到指定的文件中。
復制代碼
代碼如下:
#
vim
/etc/php.inidisplay_errors
=
Off
log_errors
=
On
error_log
=
/var/log/php-error.log
另外也可以設定error_log
=
syslog,使這些錯誤信息記錄到操作系統的日誌里。
display_errors
=
Off
//display中文意思是顯示所以display_error=off的意思就是不顯示錯誤了!
error_reporting
設定錯誤訊息回報的等級
2047我記得應該是E_ALL。
php.ini
文件中有許多配置設置。您應當已經設置好自己的
php.ini
文件並把它放在合適的目錄中,就像在
Linux
上安裝
PHP
和
Apache
2
的文檔說明中所示的那樣(請參閱
參考資料)。在調試
PHP
應用程序時,應當知道兩個配置變數。下面是這兩個變數及其默認值:
display_errors
=
Off
//關閉所有錯誤信息,為ON時為顯示所有錯誤信息。
error_reporting
=
E_ALL
E_ALL能從不良編碼實踐到無害提示到出錯的所有信息。E_ALL
對於開發過程來說有點太細,因為它在屏幕上為一些小事(例如變數未初始化)也顯示提示,會搞糟瀏覽器的輸出
所以不建議使用2047,最好把默認值改為:error_reporting
=
E_ALL
&
~E_NOTICE
PHP.ini中display_errors
=
Off失效的解決
問題:
PHP設置文件php.ini中明明已經設置display_errors
=
Off,但是在運行過程中,網頁上還是會出現錯誤信息。
解決:
經查log_errors=
On,據官方的說法,當這個log_errors設置為On,那麼必須指定error_log文件,如果沒指定或者指定的文件沒有許可權寫入,那麼照樣會輸出到正常的輸出渠道,那麼也就使得display_errors
這個指定的Off失效,錯誤信息還是列印了出來。於是將log_errors
=
Off,問題就解決了。
經常見到error_reporting(7)直意為:設定錯誤訊息回報的等級。
value
constant
1
E_ERROR
2
E_WARNING
4
E_PARSE
8
E_NOTICE
16
E_CORE_ERROR
32
E_CORE_WARNING
64
E_COMPILE_ERROR
128
E_COMPILE_WARNING
256
E_USER_ERROR
512
E_USER_WARNING
1024
E_USER_NOTICE
2047
E_ALL
2048
E_STRICT
然而7=1+2+4
就是出錯時顯示1
E_ERROR
2
E_WARNING
4
E_PARSE
復制代碼
代碼如下:
<?php
//禁用錯誤報告
error_reporting(0);
//報告運行時錯誤
error_reporting(E_ERROR
|
E_WARNING
|
E_PARSE);
//報告所有錯誤
error_reporting(E_ALL);
?>
❼ syslog/reports.php的格式在哪
syslog/reports.php的格式在哪
Osworkflow中的State是由step和status聯合表達的,一個State就是一個step中的某個status;而state的轉換由action來驅動,類似狀態圖中的event,因為一個event對應一個action嘛。 Jbpm的如來神掌就沒有上面的簡單了,它結合應用了狀態圖+活動圖+PetriNet的知識,而且,這里的活動圖還是UML2.0版的。UML2.0的活動圖中,節點不叫活動(Activity)而叫動作(action),活動成了一個高層次的概念,它包含一個動作序列。一個活動圖展現一系列的動作,這些動作組成了活動。Jbpm把action也改名了,稱為state。Jbpm使用的狀態圖的概念有transition/event等,這個自己去看吧。
❽ php openlog()函數怎麼用最好能詳細說明,非常感謝!
本函數會打開操作系統的紀錄機制 (logger)。參數 ident 會加到紀錄的字元串中。參數 option 的值包括了 LOG_PID、LOG_CONS、LOG_ODELAY、LOG_NDELAY、LOG_NOWAIT、LOG_PERROR,在 Win32 系統中,只有 LOG_PID 有效。參數 facility 的值可能為 LOG_KERN、LOG_USER、LOG_MAIL、LOG_DAEMON、LOG_AUTH、LOG_SYSLOG、LOG_LPR、LOG_NEWS、LOG_UUCP、LOG_CRON 或 LOG_AUTHPRIV,在 Win32 系統上,本參數是無效的欄位。本函數呼叫 UNIX 系統的 openlog() 函數,因此在 Windows 系列的操作系統中,本函數沒有完全的實作。
使用範例
<?php
openlog("FUN", LOG_PID | LOG_CONS, LOG_USER);
syslog(LOG_INFO, "Wa ha ha ....");
closelog();
?>
參考
syslog() closelog()
❾ php+nginx如何在瀏覽器輸出錯誤日誌
要想讓php-fpm顯示錯誤日誌,首先需要配置php-fpm。
在php-fpm的配置文件中(一般位於php安裝目錄下的etc/php-fpm.conf)配置php錯誤日誌的文件路徑。
1
2
3
4
5
6
; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; in a local file.
; Note: the default prefix is /home/wangwei/php/var
; Default Value: log/php-fpm.log
;error_log = log/php-fpm.log
如上是我的php-fpm.conf文件中配置錯誤日誌的地方。把error_log = log/php-fpm.log之前的;去掉,然後修改為:
1
2
3
4
5
6
; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; in a local file.
; Note: the default prefix is /home/wangwei/php/var
; Default Value: log/php-fpm.log
error_log = /home/work/log/php-fpm.log.wf
修改之後,保存配置,然後重啟php-fpm就可以啦。
注意如果用相對路徑的話,的路徑的前綴是基於php安裝目錄的var目錄的。