php操作riak(php使用)

本文目錄一覽:

有沒有技術大牛了解java開發,測試和CI的關

大家可能對如下情景比較熟悉:

如果開發過SSH的web項目,啟動伺服器可能會比較慢,有的項目甚至需要1分多鐘,甚至更多,這個啟動時間的等待一般就浪費了;

在開發項目時,有些功能比較複雜,當時覺得思路特清晰,但是過了一段時間後,自己也忘了,完善功能時頻繁出現bug,降低開發速度;

在維護項目時,不知道自己修改的對還是不對,是否存在隱患;維護速度降下來了;

如果開發一個很多人都使用的介面,典型的如用戶系統,要保證比如升級時向下兼容;

在團隊間協作時,有時候只定義好介面,對方還沒有給實現,如何進行同步開發?

如上問題,估計只要是個開發人員,都可能遇到過;如果此時有了單元/集成測試,那我們能很好的解決這些問題。(註:加下來如果沒有特殊情況,不刻意強調 單元測試/集成測試,即提到測試是指的是單元/集成測試)

我從以下幾個方面介紹測試:

1、為什麼需要測試?

2、如何進行測試?

3、測試有哪些好處?

4、一切都需要測試嗎?

1、為什麼需要測試?

測試的目的是什麼?我的理解是:

縮短髮現問題到解決問題的速度;

給程序一個修改後能驗證是否正確的保證;(回歸測試)

如果是開源軟體,我們可以通過單元測試了解其是怎麼使用的;比如我之前通過cglib的單元測試學習過cglib的使用;

所以如果你遇到如上問題,就需要寫測試。寫測試可能是為了自己(1、2);也可能是為了幫助別人(3)。

2、如何進行測試?

很多朋友不知道如何進行測試,其實測試很簡單,別把它想複雜了,按照自己的想法測試每個功能點是否正確即可。

2.1、測試流程

單元測試流程

集成測試流程

集成測試流程 

可以看出,單元測試與集成測試唯一不同點是一個調用依賴系統而一個不調用;因為單元測試是最小粒度的測試,如在Java中是測試一個類,不會測試依賴系統;而集成測試是會測試依賴系統的。

測試的步驟:

準備環境

調用被測系統

驗證

清理環境

環境:也叫做夾具(fixture)或者固件,表示調用被測系統時需要準備/清理的數據等等;

被測系統:在Java中就是要測試的類,如UserService;

依賴系統:測試被測系統時,其依賴的部分,如UserDao;

測試用例:包含測試方法的類,裡邊有很多測試方法來測試被測系統。

接下來仔細看看各部分都做了哪些工作。

2.2、環境

環境,也叫做夾具(fixture),表示調用被測系統時需要準備/清理的數據等等;保證測試時環境是乾淨的,如不被之前的資料庫數據影響;保證每次測試都是在乾淨/新鮮的環境中執行的。所謂乾淨的環境表示如當前測試不被之前測試插入/刪除/修改的數據造成影響。在junit中可以使用:

@Before(setUp) 安裝夾具或準備環境:在測試用例的每個測試方法之前執行;比如創建新鮮的被測系統,單元測試時安裝Mock的依賴系統;

@After(tearDown)卸載夾具或清理環境:在測試用例的每個測試方法之後執行;比如資料庫測試時回滾事務,刪除數據;關閉文件;

@BeforeClass:在整個測試用例之前執行;

@AfterClass:在整個測試用例之後執行;

使用如上方法,而不是直接在測試方法中安裝/卸載;是因為不管有沒有異常,@After/@AfterClass都會執行,這樣防止出現異常可能造成環境是不新鮮的問題。

如果大家使用spring test來測試資料庫相關的系統,可以考慮使用@TransactionConfiguration來支持默認事務回滾,這樣不會對現有系統造成影響。具體可參考《【第十三章】 測試 之 13.1 概述 13.2 單元測試 ——跟我學spring3》和《【第十三章】 測試 之 13.3 集成測試 ——跟我學spring3》

測試時一定要保證環境是乾淨/新鮮的,才能保證每次測試的結果是一樣的。

2.3、被測系統與依賴系統

被測系統:在Java中就是被測試的Java類。

依賴系統:就是被測試Java類依賴的其他類。

如果是單元測試,一般情況下,會對依賴系統進行模擬(Mock),即給它一個假的實現;典型的如測試服務層時注入一個Mock的DAO層,這樣的好處:

加快測試速度;因為不會調用真實的被測系統,所以速度特別快;

測試還沒有完成的功能;尤其在多團隊協作時,可以只在定義好介面的情況下開發系統;

如果是集成測試時,直接注入真實的依賴系統即可,好處:

完成聯調;

發現自己的問題;

還可能發現自己使用上問題及使用的API的問題;

單元測試雖然好,但是是隔離測試,即不會調用被測系統來完成測試,因為不是真實的聯調,所以很可能會潛在有一些問題,因此還是需要集成測試。(所以不是很刻意分單元或集成測試,且有些系統可能只有集成測試)

但是集成測試速度是比較慢的,一般提交給CI執行,不影響當前開發進度。

2.4、驗證

驗證的目的:是保證實際結果和我們預期的結果是否一致,說白了就是是否是我們想的那樣。

一般使用斷言來驗證,如:

Assert.assertEquals(expectedResult, actualResult); //驗證預期結果和實際結果是否相等

驗證主要有兩種:

結果驗證

行為驗證

結果驗證:即驗證被測系統返回的結果是否正確,如:

Java代碼  

@Test

public void testCount() {

String ql = “select count(o) from User o”;

long expectedCount = repositoryHelper.count(ql) + 1;

User user = createUser();

repositoryHelper.getEntityManager().persist(user);

long acutalCount = repositoryHelper.count(ql);

Assert.assertEquals(expectedCount, acutalCount);

}

驗證返回的數據總數 = 插入之前的總數 + 1; 即結果驗證。此處我們使用了一種叫做相對(delta)測試;即不關心資料庫里到底多少條,只關心實際的和預期的差。

行為驗證:即驗證被測系統是否調用了依賴系統的某個API ,這個只有當我們使用Mock時測試時比較簡單,如當用戶註冊時:

1、加積分

2、發系統消息

3、……

此時我們並不能通過結果驗證是否調用了這些方法;那麼我們可以使用Mock技術來完成驗證是否調用了這些API,比如使用jmock測試框架就支持行為驗證。集成測試是很難進行行為驗證的,如果測試需要預留間諜介面。

3、測試有哪些好處?

我們寫代碼的目的是正確的完成某個功能,如何保證正確呢?測試!所以在不使用如單元測試技術時,我們也是需要測試,但是這個測試是我們人工驗證的。缺點很明顯:

不是自動的,每次需要對比預期結果與實際結果,尤其數據量/邏輯複雜時更痛苦;

不是回歸的,上次測試完成後,下次還得重複自己一遍;

為了解決這個問題,我們使用如單元測試技術來解決這個問題:

測試自動化;即驗證預期結果與實際結果交給計算機吧;

測試回歸性,可以重複執行測試,驗證修改後邏輯是否還是正確的;

即測試的好處,從如上已經提煉出來了:

縮短髮現問題到解決問題的時間;

重複使用測試,保證修改後的代碼還是正確的;

如果做開源項目,可以提供給使用人員參考如何使用;

因為單元測試都非常快,所以提升了開發速度;

4、一切都需要測試嗎?

肯定不是,一切都是相對的;哪些不需要測試呢:

你非常熟悉的功能;

一些簡單的CRUD;

你認為不需要測試的;比如你很有把握的東西,就沒有必要浪費時間測試了;

哪些需要測試呢:

複雜的業務邏輯/系統核心功能,最典型的如訂單系統:一定要有足夠的單元測試保證,這是一個電商系統的核心;還有如用戶系統、積分系統等等;

框架級別/工具級別/通用級別的代碼需要測試,即提供給第三方使用的代碼,因為這些代碼可能被很多系統依賴,應該保證其正確性;而且還要保證以後版本升級的向下兼容;

你認為需要測試的,比如你沒有把握的東西,還是寫點測試來縮短如開發web項目的重啟系統的時間吧;

測試不是不耗時間的,沒意義的測試就是浪費時間,最典型是一些書上的對一個增刪改查進行測試,實際項目沒有任何意義。所以你應該只對自己很難駕馭的覺得有必要的代碼進行測試。不要成為一個測試狂,什麼都測試。

一些測試可以參考我的《es——JavaEE快速開發腳手架》中的代碼。通過測試我得到了許多好處。

到此我們介紹完成了測試,但是如果我們使用了如集成測試時,測試執行起來可能比較慢,跑一遍測試可能需要5分鐘,那怎麼辦呢?

每天下班前跑一遍集成測試,然後修復,下班走人;

CI:持續集成,交給持續集成伺服器,自動地測試完成後把測試報告以郵件的形式發到開發人員郵箱;

————————————分割線———————————-

接下來介紹一下CI吧。

1、為什麼需要CI

2、CI如何工作的

3、travis-ci介紹

1、為什麼需要CI

正如前邊說的,我們單獨測試可能會遇到如下問題:

如果寫了一個測試,就要把所有測試跑一遍看看整個系統是否是正確的,那麼每次等待時間是非常漫長的;

如果團隊中的其他成員改了功能並提交了,如何快速得到該次提交對當前系統代碼是正確還是失敗的反饋;

那怎麼辦呢?自動化地持續集成(CI)!CI的核心就是干這件事情的。自動化持續地集成測試。

使用CI後,如果使用Maven,可以新建多個profile:

本地測試時忽略一些比較慢的測試;

CI伺服器上執行所有測試;

2、CI如何工作的

一個典型的持續集成流程:

定期檢測版本伺服器上是否有代碼更新;

如果發現代碼更新,從版本伺服器下載最新的代碼;

自動構建並自動化的測試;

不管錯誤/失敗,生成報告給開發人員;

有些CI伺服器還能產生可執行的軟體,自動化地部署到測試機器,交給測試人員測試。

如圖所示:

持續集成伺服器其實就是一個定時器,自動幫你下載最新代碼、編譯、測試、集成及產生報告發給開發人員。

常見的CI伺服器有:

Apache Continuum

Hudson

CruiseControl

Jenkins CI

TeamCity

Travis CI

我09年時使用過TeamCity社區版,足夠滿足常見需求;目前我使用github託管項目,使用Travis CI進行分散式的持續集成,免費,目前看來還是不錯的。

3、travis-ci介紹

我現在開發的ES-JavaEE項目開發腳手架就是使用travis ci進行持續集成;具體參考《Getting started》進行與Github集成,其支持的語言:

C

C++

Clojure

Erlang

Go

Groovy

Haskell

Java

JavaScript (with Node.js)

Objective-C

Perl

PHP

Python

Ruby

Scala

支持的資料庫:

MySQL

PostgreSQL

MongoDB

CouchDB

Redis

Riak

RabbitMQ

Memcached

Cassandra

Neo4J

ElasticSearch

Kestrel

SQLite3

更多請參考其官網的介紹。

如果是Java開發人員,支持的JDK包括:OpenJDK 和 OracleJDK。 如果使用的是OpenJDK,Maven中使用ascii2native插件時,需要如下配置:

Java代碼  

plugin

groupIdorg.codehaus.mojo/groupId

artifactIdnative2ascii-maven-plugin/artifactId

version1.0-alpha-1/version

executions

execution

phasegenerate-resources/phase

goals

goalnative2ascii/goal

/goals

configuration

encodingUTF-8/encoding

srcsrc/main/messages/src

desttarget/${project.artifactId}/WEB-INF/classes/dest

includesmessages.properties/includes

/configuration

/execution

/executions

!– native2ascii 使用的tools.jar —

dependencies

dependency

groupIdcom.sun/groupId

artifactIdtools/artifactId

version1.7.0/version

scopesystem/scope

systemPath${java.home}/../lib/tools.jar/systemPath

/dependency

/dependencies

/plugin

如果使用mysql,埠只能是3306。

如果想開埠測試,這是不允許的。

如下是我項目中的一個配置.travis.yml,放到項目的根下即可:

———————————–

language: java           語言

env:                           環境

– DB=mysql              使用mysql

jdk:

– openjdk                jdk使用openjdk

mysql:

database: es         資料庫名為es

username: root     用戶名為root

password :            密碼為空

encoding: utf8      編碼為utf8

install:                     安裝時執行的腳本

– mvn install -Dmaven.test.skip=true     mvn安裝並跳過測試

before_script:        script之前執行的測試

– cd web            

– mvn db:create  創建資料庫的mvn命令(此處使用了 maven-db-plugin 插件)

– mvn db:schema  創建腳本的mvn命令

– mvn db:data        安裝數據的mvn命令

– cd ..

script:                      測試時執行的腳步

– cd common

– mvn test              測試common子模塊

– cd ..

– cd web

– mvn test -Pit       測試web子模塊,並指定使用it profile測試(即集成測試的配置,具體參考pom.xml中的profile/it)

notifications:          觸發

email:                  測試完成後測試報告發到哪

– zhangkaitao0503@gmail.com

———————————–

持續集成不能修復代碼的錯誤,而是和單元測試一樣,縮短髮現問題帶解決問題的時間,這樣可以提高開發效率,降低項目風險,提高項目的穩定性。而且尤其是團隊協作時,可以發現其他人的代碼是否對自己的代碼產生影響。

到此我們利用單元測試+CI可以加速開發人員的開發速度。利用好單元測試和CI,不要純粹為了單元測試和CI而去做這些事情。

本文沒有介紹TDD,TDD並不會那麼美好,我認為我們可以借鑒TDD的一些思想,但決不能迷信TDD,有時候,尤其如開發企業應用,先寫功能再寫測試可能效率更高,而且大部分時候是不需要TDD的。而且我也沒能在實際項目中獲取太多TDD的好處,但是我獲得了測試的好處。

本文也沒有介紹測試覆蓋率,我認為不要一味的追求覆蓋率,有時候有的覆蓋率沒有任何意義。所以不要讓為了覆蓋率而覆蓋率拖慢了項目開發進度。

正如stackoverflow上的一篇帖子《How deep are your unit tests?》上Kent Beck的回答:

寫道

老闆為我的代碼付報酬,而不是測試,所以,我對此的價值觀是——測試越少越好,少到你對你的代碼質量達到了某種自信。

可以前往coolshell的「單元測試要做多細?」去得到一些經驗。

哪個不是Hadoop 的核心組件 hbase hive zookeeper riak

riak 華師大的吧- –

下面來簡單介紹各個組件的作用:

HDFS(Hadoop distribute file system)——Hadoop生態系統的基礎組件Hadoop分散式文件系統。它是其他一些工具的基礎HDFS的機制是將大量數據分布到計算機集群上,數據一次寫入,但可以多次讀取用於分析。HDFS讓Hadoop可以最大化利用磁碟。

HBase—— 一個構建在HDFS之上的面向列的NoSql資料庫,HBase用於對打量數據進行快速讀取/寫入。HBase將Zookeeper用於自身的管理,以保證其所有組件都正在運行。HBase使得Hadoop可以最大化利用內存。

MapReduce——MapReduce是Hadoop的主要執行框架,它是一個用於分散式並行數據處理的編程模型,將作業分為mapping階段和reduce階段。開發人員謂Hadoop編寫MapReduce作業,並使用HDFS中存儲的數據,而HDFS可以保證快速的數據訪問。鑒於MapReduce作業的特性,Hadoop以並行的方式將處理過程移向數據。MapReduce使得Hadoop可以最大化利用CPU。

Zookeeper——Zookeeper是Hadoop的分散式協調服務。Zookeeper被設計成可以在機器集群上運行,是一個具有高度可用性的服務,用於Hadoop操作的管理,而且很多Hadoop組件都依賴它。

Oozie—— Oozie是一個北極測很難過到Hadoop軟體棧中的可擴展的Workflow系統。用於協調多個MapReduce作業的執行。它能夠處理大量的複雜性,基於外部事件來管理執行。

Pig——Pig是對MapReduce編程複雜性的抽象,Pig平台包含用於分析Hadoop數據集的執行環境和腳本語言(Pig Latin)。它的編譯器將Pig Latin翻譯為MapReduce程序序列。

Hive——類似於SQL的高級語言,用於執行對存儲在Hadoop中數據的查詢,Hive允許不熟悉MapReduce的開發人員編寫數據查詢語句,它會將翻譯為Hadoop中的MapReduce作業。類似於Pig。Hive是一個抽象層,適合於較熟悉SQL而不是java編程的資料庫分析師。

Hadoop生態系統中還包含一些用於與其他企業級應用進行集成的框架,例如上圖所示的Sqoop和Flume:

Sqoop是一個連通性工具,用於在關係型資料庫和數據倉庫Hadoop之間移動數據。Sqoop利用資料庫來描述導入/導出數據的模式,並使用MapReduce實現並行操作和容錯。

Fulme是一個分散式的、具有可靠性和高可用性的服務,用於從單獨的機器上將大量數據高效的收集、聚合併移動到HDFS中。它給予一個簡單靈活的架構,童工流式數據操所。它藉助於簡單可擴展的數據模型,允許將來自企業中多台機器上的數據移到Hadoop中。

mac brew 怎麼安裝msql 5.5

Brew 是 Mac 下面的包管理工具,通過 Github 託管適合 Mac 的編譯配置以及 Patch,可以方便的安裝開發工具。 Mac 自帶ruby 所以安裝起來很方便,同時它也會自動把git也給你裝上。官方網站: brew/Homebrew/homebrew/go/install)” 使用以下方法可以查看brew是否安裝成功,以及目前的版本:liondeMacBook-Pro:~ lion$ brew -v Homebrew 0/project/machomebrew/Bottles/curl-7/freetds/stable/freetds-0/project/machomebrew/Bottles/gmp-6.0.0a.mavericks.bottle.tar.gz ######################################################################## 100.0% == Pouring gmp-6.0.0a.mavericks.bottle.tar.gz /usr/local/Cellar/gmp/6.0.0a: 15 files, 3.2M == Installing php55 == Downloading /get/php-5.5.15.tar.bz2/from/this/mirror Already downloaded: /Library/Caches/Homebrew/php55-5.5.15 == ./configure –prefix=/usr/local/Cellar/php55/5.5.15 –localstatedir=/usr/local/var –sysconfdir=/usr/local/etc/php/5.5 — == make == make install == /usr/local/Cellar/php55/5.5.15/bin/pear config-set php_ini /usr/local/etc/php/5.5/php.ini == Caveats The php.ini file can be found in: /usr/local/etc/php/5.5/php.ini ✩✩✩✩ PEAR ✩✩✩✩ If PEAR complains about permissions, ‘fix’ the default PEAR permissions and config: chmod -R ug+w /usr/local/Cellar/php55/5.5.15/lib/php pear config-set php_ini /usr/local/etc/php/5.5/php.ini ✩✩✩✩ Extensions ✩✩✩✩ If you are having issues with custom extension compiling, ensure that you are using the brew version, by placing /usr/local/bin before /usr/sbin in your PATH: PATH=”/usr/local/bin:$PATH” PHP55 Extensions will always be compiled against this PHP. Please install them using –without-homebrew-php to enable compiling against system PHP. ✩✩✩✩ PHP CLI ✩✩✩✩ If you wish to swap the PHP you use on the command line, you should add the following to ~/.bashrc, ~/.zshrc, ~/.profile or your shell’s equivalent configuration file: export PATH=”$(brew –prefix homebrew/php/php55)/bin:$PATH” ✩✩✩✩ FPM ✩✩✩✩ To launch php-fpm on startup: * If this is your first install: mkdir -p ~/Library/LaunchAgents cp /usr/local/Cellar/php55/5.5.15/homebrew.mxcl.php55.plist ~/Library/LaunchAgents/ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist * If this is an upgrade and you already have the homebrew.mxcl.php55.plist loaded: launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist cp /usr/local/Cellar/php55/5.5.15/homebrew.mxcl.php55.plist ~/Library/LaunchAgents/ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist The control script is located at /usr/local/Cellar/php55/5.5.15/sbin/php55-fpm Mountain Lion comes with php-fpm pre-installed, to ensure you are using the brew version you need to make sure /usr/local/sbin is before /usr/sbin in your PATH: PATH=”/usr/local/sbin:$PATH” You may also need to edit the plist to use the correct “UserName”. Please note that the plist was called ‘homebrew-php.josegonzalez.php55.plist’ in old versions of this formula. To have launchd start php55 at login: ln -sfv /usr/local/opt/php55/*.plist ~/Library/LaunchAgents Then to load php55 now: launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php55.plist == Summary /usr/local/Cellar/php55/5.5.15: 477 files, 43M, built in 3.9 minutes 過程中如果出現configure: error: Cannot find OpenSSL’s evp.h這樣的錯誤,請執行以下命令,將xcode進行更新:xcode-select –install 在PHP5安裝完成的提示中寫到,如何進行PHP5和mac自帶的php以及php-fpm替換,執行以下命令後,我們可以看到當前的php版本已經是最新的了:liondeMacBook-Pro:~ lion$ echo ‘export PATH=/usr/local/bin:$PATH’ ~/.bash_profile liondeMacBook-Pro:~ lion$ echo ‘export PATH=/usr/sbin:$PATH’ ~/.bash_profile liondeMacBook-Pro:~ lion$ echo ‘export PATH=/usr/local/sbin:$PATH’ ~/.bash_profile liondeMacBook-Pro:~ lion$ source ~/.bash_profile liondeMacBook-Pro:~ lion$ php -v PHP 5.5.15 (cli) (built: Aug 14 2014 15:37:16) (DEBUG) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies liondeMacBook-Pro:~ lion$ 使用brew search php55-命令,可以查看還有哪些擴展可以安裝,然後執行brew install php55-XXX就可以了。liondeMacBook-Pro:~ lion$ brew search php55- php55-amqp php55-igbinary php55-msgpack php55-runkit php55-varnish php55-apcu php55-imagick php55-mysqlnd_ms php55-scrypt php55-vld php55-augmentedtypes php55-inclued php55-oauth php55-snappy php55-wbxml php55-binpack php55-intl php55-opcache php55-solr php55-xcache php55-blitz php55-ioncubeloader php55-parsekit php55-sphinx php55-xdebug php55-boxwood php55-jsmin php55-pcntl php55-spl-types php55-xhgui php55-chdb php55-judy php55-pdflib php55-ssh2 php55-xhp php55-couchbase php55-leveldb php55-pdo-dblib php55-stats php55-xhprof php55-crypto php55-libevent php55-pdo-pgsql php55-stemmer php55-xmldiff php55-dbase php55-libvirt php55-phalcon php55-sundown php55-yac php55-dbus php55-lz4 php55-proctitle php55-svm php55-yaf php55-dmtx php55-lzf php55-propro php55-swoole php55-yaml php55-ev php55-mailparse php55-protobuf php55-thrift php55-yar php55-gearman php55-mcrypt php55-pspell php55-tidy php55-yaz php55-geoip php55-memcache php55-pthreads php55-timezonedb php55-yp php55-gmagick php55-memcached php55-raphf php55-tokyotyrant php55-yrmcds php55-graphdat php55-midgard2 php55-redis php55-twig php55-zmq php55-htscanner php55-mongo php55-redland php55-uploadprogress php55-zookeeper php55-http php55-mosquitto php55-riak php55-uuid 我安裝的是以下php5.5幾個擴展:liondeMacBook-Pro:~ lion$ brew install php55-imagick php55-igbinary php55-ev php55-gmagick php55-geoip php55-memcache php55-memcached php55-thrift php55-xdebug php55-sphinx composer 接下來我們測試php-fpm的配置是否正確,以及是否正確啟動:#測試php-fpm配置是否正確 liondeMacBook-Pro:bin lion$ php-fpm -t [14-Aug-2014 16:14:30] NOTICE: configuration file /usr/local/etc/php/5.5/php-fpm.conf test is successful liondeMacBook-Pro:bin lion$ php-fpm -c /usr/local/etc/php/5.5/php.ini -y /usr/local/etc/php/5.5/php-fpm.conf -t [14-Aug-2014 16:14:48] NOTICE: configuration file /usr/local/etc/php/5.5/php-fpm.conf test is successful #啟動php-fpm liondeMacBook-Pro:bin lion$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist #查看9000埠是否在運行 liondeMacBook-Pro:bin lion$ lsof -i:9000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME php-fpm 51241 lion 8u IPv4 0xce9d0f6417637937 0t0 TCP localhost:cslistener (LISTEN) php-fpm 51243 lion 0u IPv4 0xce9d0f6417637937 0t0 TCP localhost:cslistener (LISTEN) php-fpm 51244 lion 0u IPv4 0xce9d0f6417637937 0t0 TCP localhost:cslistener (LISTEN) php-fpm 51245 lion 0u IPv4 0xce9d0f6417637937 0t0 TCP localhost:cslistener (LISTEN) #關閉掉php-fpm進程,再查看9000埠,沒有監聽了 liondeMacBook-Pro:bin lion$ ps auxgrep php-fpmgrep -v ‘grep’awk ‘{print $2}’xargs kill -9 liondeMacBook-Pro:bin lion$ lsof -i:9000 liondeMacBook-Pro:bin lion$ 設置PHP-FPM開機運行(其實在安裝完成的提示中,也有說明):ln -sfv /usr/local/opt/php55/*.plist ~/Library/LaunchAgents launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php55.plist

原創文章,作者:HU8HX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/129896.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HU8HX的頭像HU8HX
上一篇 2024-10-03 23:27
下一篇 2024-10-03 23:27

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python棧操作用法介紹

    如果你是一位Python開發工程師,那麼你必須掌握Python中的棧操作。在Python中,棧是一個容器,提供後進先出(LIFO)的原則。這篇文章將通過多個方面詳細地闡述Pytho…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • Python磁碟操作全方位解析

    本篇文章將從多個方面對Python磁碟操作進行詳細闡述,包括文件讀寫、文件夾創建、刪除、文件搜索與遍歷、文件重命名、移動、複製、文件許可權修改等常用操作。 一、文件讀寫操作 文件讀寫…

    編程 2025-04-29
  • Python代碼實現迴文數最少操作次數

    本文將介紹如何使用Python解決一道經典的迴文數問題:給定一個數n,按照一定規則對它進行若干次操作,使得n成為迴文數,求最少的操作次數。 一、問題分析 首先,我們需要了解迴文數的…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Python元祖操作用法介紹

    本文將從多個方面對Python元祖的操作進行詳細闡述。包括:元祖定義及初始化、元祖遍歷、元祖切片、元祖合併及比較、元祖解包等內容。 一、元祖定義及初始化 元祖在Python中屬於序…

    編程 2025-04-29
  • Python列表的讀寫操作

    本文將針對Python列表的讀取與寫入操作進行詳細的闡述,包括列表的基本操作、列表的增刪改查、列表切片、列表排序、列表反轉、列表拼接、列表複製等操作。 一、列表的基本操作 列表是P…

    編程 2025-04-29
  • 如何用Python對數據進行離散化操作

    數據離散化是指將連續的數據轉化為離散的數據,一般是用於數據挖掘和數據分析中,可以幫助我們更好的理解數據,從而更好地進行決策和分析。Python作為一種高效的編程語言,在數據處理和分…

    編程 2025-04-29

發表回復

登錄後才能評論