2016-11-04 26 views
1

我想捕獲詹金斯啓動腳本的輸出,但我得到的只是一個空輸出。如何捕獲詹金斯啓動日誌

詹金斯的輸出出現在終端

#!/bin/bash 
function sendNotificationOnSlack() { 
    curl -X POST ... 
} 
export -f sendNotificationOnSlack 
java -Dhudson.DNSMultiCast.disabled=true -jar /usr/local/opt/jenkins/libexec/jenkins.war --httpPort=3999 | awk '/Jenkins is fully up and running/ {system("bash -c sendNotificationOnSlack")}' 

我試過甚至捕捉到TTY的輸出,但顯示爲空

#!/bin/bash 
currentTTY=$(tty) 
echo $currentTTY 
function sendNotificationOnSlack() { 
    curl -X POST ... 
} 
export -f sendNotificationOnSlack 
java -Dhudson.DNSMultiCast.disabled=true -jar /usr/local/opt/jenkins/libexec/jenkins.war --httpPort=3999 
tail -f $currentTTY | awk '/Jenkins is fully up and running/ {system("bash -c sendNotificationOnSlack")}' 

我試着到處尋找,但我找不到jenkins.log文件,任何人有任何建議?

+0

我不能完全肯定關於這個問題,但是如果你必須捕獲輸出,也許你應該讓Jenkins在一個進程中產卵並從另一個進程中捕獲日誌。也就是說,也許你應該'輸出'[像這樣](http://stackoverflow.com/questions/692000/how-do-i-write-stderr-to-a-file-while-using-tee-用管道)將文件轉換成文件並從那裏進行處理,將管道移到awk文件中。 'awk'可以用於'tee'寫的文件。 – alok

+0

另外,我假設你不想讓日誌落在'/ var/log/jenkins/jenkins.log'裏嗎? – alok

+0

@alok感謝您的回覆。問題是輸出不會被捕獲,即使在shell上顯示「awk」管道(一個沒有重定向的標誌,但仍然會到達相同的地方)。 我已經檢查過'/ var/log/jenkins /'並且文件夾是空的 –

回答

0

創建以下groovy文件中:$ JENKINS_HOME/init.groovy.d /額外logging.groovy

重啓詹金斯和檢查目錄$ JENKINS_HOME /日誌/

import java.util.logging.ConsoleHandler 
import java.util.logging.FileHandler 
import java.util.logging.SimpleFormatter 
import java.util.logging.LogManager 
import jenkins.model.Jenkins 

def logsDir = new File(Jenkins.instance.rootDir, "logs") 

if(!logsDir.exists()){ 
    println "--> creating log dir"; 
    logsDir.mkdirs(); 
} 

def loggerWinstone = LogManager.getLogManager().getLogger(""); 
FileHandler handlerWinstone = new FileHandler(logsDir.absolutePath + "/jenkins-winstone.log", 1024 * 1024, 10, true); 

handlerWinstone.setFormatter(new SimpleFormatter()); 
loggerWinstone.addHandler (new ConsoleHandler()); 
loggerWinstone.addHandler(handlerWinstone);