2017-01-09 79 views
0

我有一些PHP文件。它們每個都啓動一個套接字監聽器,或者運行一個無限循環。如何在單個shell行中執行多個PHP文件?

php sock_listener.php ...halt there 
php listener2.php ... halt there 
... 

目前我使用screen命令來啓動所有聽者的PHP文件在每次機器重新啓動時間:通過php命令執行時的腳本阻止。有沒有一種方法可以啓動單個shell行中的所有偵聽器PHP文件,以便我可以編寫一個shell腳本以使其更易於使用?

+0

不使用'exec'命令 –

回答

1

使用屏幕

創建第一個腳本分離屏幕會話:

session='php-test' 
screen -S "$session" -d -m -t A php a.php 

其中-d -m組合導致畫面上營造一種超然的會話。

在單獨的窗口在同一會話運行腳本的其餘部分:

screen -S "$session" -X screen -t B php b.php 
screen -S "$session" -X screen -t C php c.php 

其中

  • -X發送內置screen命令運行會話;
  • -t設置窗口標題。

會議將在screen -ls命令的輸出可用:

There is a screen on: 
    8951.php-test (Detached) 

連接到會話使用-r選項,如:

screen -r 8951.php-test 

列表屏幕會與內窗Ctrl - a快捷方式或windowlist -b命令。

分叉過程對背景

一個不太方便的方式是通過在每個命令的末尾追加與號發送命令到背景:

nohup php a.php 2>a.php.err >a.php.out & 
nohup php b.php 2>b.php.err >b.php.out & 
nohup php c.php 2>c.php.err >c.php.out & 

其中

  • nohup防止如果用戶退出shell,則終止命令。有關更多信息,請閱讀this tutorial;
  • 2>a.php.err將標準錯誤重定向到a.php.err文件;
  • >a.php.out將標準輸出重定向到a.php.out文件。

有沒有辦法我就可以開始在所有單殼線聽衆PHP文件,以便我可以寫一個shell腳本,使其更容易使用?

你可以把上述命令放到腳本文件,如:

#!/bin/bash - 
# Put the commands here 

使其可執行:

chmod +x /path/to/script 

,並調用它,當你需要它:

/path/to/script 

shebang修改爲適當的即

+0

感謝您的詳細解答,以及問題修改。 – MarcusM

+0

我把2個屏幕命令放到一個shell腳本中並調用它,第二個屏幕行沒有到達,因爲它在第一個屏幕會話中被佔用,我必須按ctrl + a-d,然後第二個屏幕行開始。雖然我需要一個可以通過調用它打開2個屏幕會話的shell腳本,但不需要額外的操作。你有什麼想法?謝謝! – MarcusM

+0

@MarcusM,shell腳本應該看起來像[this](https://gist.github.com/a0044b80f280b8cd3b6cde2632ed6f58)(_three_'screen'命令)。當你啓動它時:'./ script.sh',它不會將你轉到屏幕會話,因爲它是分離的。 –

相關問題