2012-08-25 28 views
0

我需要一個調度器(用於僅一次操作)的網站我編碼中(PHP),我有兩個想法:Linux「at」命令可以在/ bin/sh以外的環境中運行嗎?

1-運行PHP腳本與crontab中驗證對數據庫的計劃動作並執行比當前時間早的動作。

2-使用「at」命令安排各種任務。

第二個選項似乎更好,更簡單,所以這就是我想要做的。但是,我還沒有找到一種方法來告訴「at」使用PHP解釋器來運行一個命令,到目前爲止,我一直在創建一個.sh腳本,它包含一個單獨的命令,它將通過PHP解釋器。這遠非最佳設置,我希望我可以直接通過「at」執行php代碼,例如:

at -e php -f /path/to/phpscript time 

是否有可能?我還沒有發現任何關於在bash中使用除了bash之外的其他環境的信息。

+0

你的意思就像「echo」php -f/path/to/phpscript'| at time「? – jhfrontz

回答

2

您可以在phpscript的前面加上#!/usr/bin/php(或無論您的php腳本存儲在何處)並使/path/to/phpscript可執行。這正是#!語法的用處。

正是這樣很明顯,你phpscript應該是這樣的:

#!/usr/bin/php 

...your code goes here 
+0

我試過了,但沒有奏效。我可以使用./phpscript在終端中執行腳本,但at命令似乎仍然使用/ bin/sh來執行。 – drakenation

+0

你應該在'at'命令文件中顯式地設置你的'PATH'。 –

0

您指定at該命令是由/bin/sh執行,但SH可以調用任何命令,直接或通過任何指定的解釋執行。

我的Ubuntu 12.04系統上的以下工作在Bash shell中:

$ cat hello.php 
#!/usr/bin/php 
<?php 
    echo "Hello, PHP\n"; 
?> 
$ echo "$PWD/hello.php > hello.php.out" | at 16:11 
warning: commands will be executed using /bin/sh 
job 4 at Sat Aug 25 16:11:00 2012 
$ date 
Sat Aug 25 16:11:05 PDT 2012 
$ cat hello.php.out 
Hello, PHP 
$ 

在某些情況下,你就必須做一些額外的工作,以正確設置環境變量(這是沒有必要這個簡單的例子)。引述手冊頁:

對於這兩種一批,命令從標準輸入讀取或與-f選項指定和執行的 文件。工作目錄, 環境(除變量BASH_VERSINFO顯示EUIDSHELLOPTSTERMUID,並_)和umask的是從調用時起保留 。

作爲目前實現爲setuid程序,其他環境變量 (例如LD_LIBRARY_PATHLD_PRELOAD)也不會導出。 這可能會在未來發生變化。作爲一種解決方法,請在作業中明確設置這些變量 。

相關問題