2015-10-06 128 views
1

我試圖觸發Laravel控制檯命令PHP的每一個插入的行推到我的客戶端UI,但過程似乎並沒有安裝lib_mysqludf_sys庫sys_exec(工作後)/ sys_eval( )支持。MySQL的程序與sys_exec()

環境是Laravel Homestead Vagrant VM。這是運行Ubuntu 14.04.3和MySQL 5.6.19-0ubuntu0.14.04.1。我還編譯併成功安裝了lib_mysqludf_sys庫。

  • 當使用sys_exec()時,運行該過程時得到返回的退出代碼32512。
  • 使用sys_eval()時,運行該過程時,在debug_msg輸出中沒有輸出。
  • 使用debug_msg迴盪CMD,其手動運行沒有問題的CLI。
  • 沒有mysql的error.log輸出

有誰知道如何進一步解決這個問題?

DELIMITER $$ 

DROP PROCEDURE IF EXISTS homestead.debug_msg$$ 
DROP PROCEDURE IF EXISTS homestead.sessionActivity$$ 

CREATE PROCEDURE homestead.debug_msg(enabled INTEGER, msg VARCHAR(255)) 
BEGIN 
    IF enabled THEN BEGIN 
    select concat("** ", msg) AS '** DEBUG:'; 
    END; END IF; 
END $$ 

CREATE PROCEDURE homestead.sessionActivity(id BIGINT) 
BEGIN 
    IF id THEN BEGIN 
    DECLARE cmd CHAR(255); 
    DECLARE result CHAR(255); 
    SET cmd = CONCAT('/usr/bin/php /home/vagrant/Code/Laravel/artisan session:push ', id); 
    SET result = sys_eval(cmd); 
    #####SET result = sys_exec(cmd); 
    call debug_msg(TRUE,cmd); 
    #####call debug_msg(TRUE,result); 
    END; END IF; 
END$$ 

DELIMITER ; 

在這裏與debug_msg運行顯示CMD變量:

mysql> CALL homestead.sessionActivity(74499); 
+--------------------------------------------------------------+ 
| ** DEBUG:             | 
+--------------------------------------------------------------+ 
| ** php /home/vagrant/Code/Laravel/artisan session:push 74499 | 
+--------------------------------------------------------------+ 
1 row in set (0.00 sec) 

哪個手動精細運行:

[email protected]:~# php /home/vagrant/Code/Laravel/artisan session:push 74499 
string(259) "new line: some shit eol" 
[email protected]:~# 

在這裏與debug_message運行顯示結果變量,使用sys_exec() ,但再次重申,PHP命令不跑了,並沒有其他的輸出或記錄顯示(這裏sys_eval()而不是sys_exec()輸出將是空的)錯誤:

mysql> CALL homestead.sessionActivity(74499); 
+-----------+ 
| ** DEBUG: | 
+-----------+ 
| ** 32512 | 
+-----------+ 
1 row in set (0.01 sec) 

奇怪的是,雖然lib_mysqludf_sys安裝創建函數,但它們不顯示在show function狀態中。我不確定它是否相關。

mysql> CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.so'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE FUNCTION sys_get RETURNS string SONAME 'lib_mysqludf_sys.so'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE FUNCTION sys_set RETURNS int SONAME 'lib_mysqludf_sys.so'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> show function status; 
Empty set (0.01 sec) 

mysql> 

回答

0

在這種情況下,lib_mysqludf_sys呼叫被Apparmor阻止。快速aa-complain /usr/sbin/mysqld解決了這個問題。