Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 将shell脚本输出到日志文件_Unix_Logging - Fatal编程技术网

Unix 将shell脚本输出到日志文件

Unix 将shell脚本输出到日志文件,unix,logging,Unix,Logging,我有一个计划好的unix脚本,我想记录它的输出。由于用户界面限制,我无法编辑cron文件,也无法将>>日志文件添加到命令中。我是否可以在脚本本身中添加一些东西来将输出发送到日志 { printf poo #Do not change PRINTF=/usr/bin/printf MSMTP=/usr/local/bin/msmtp MSMTPCONF=/var/etc/msmtp.conf #Can be changed FROM="nas4free@usinfosec.com" TO

我有一个计划好的unix脚本,我想记录它的输出。由于用户界面限制,我无法编辑cron文件,也无法将>>日志文件添加到命令中。我是否可以在脚本本身中添加一些东西来将输出发送到日志

{

printf poo

 #Do not change
PRINTF=/usr/bin/printf
MSMTP=/usr/local/bin/msmtp
MSMTPCONF=/var/etc/msmtp.conf

 #Can be changed
FROM="nas4free@usinfosec.com"
TO="dpatino@usinfosec.com"
MDIR="CaseData"
SUBJECT="$MDIR Backup Report"


} > /mnt/support/logs/$SUBJECT.log
#BODY="$(cat /mnt/support/logs/test.log)"
#$PRINTF "From:$FROM\nTo:$TO\nSubject:$SUBJECT\n\n$BODY" | $MSMTP --file=$MSMTPCONF -t

在脚本的开头追加以下行

log_file_path="/tmp/output.log"
log() { while IFS='' read -r line; do echo "$line" >> "$log_file_path"; done; };
exec > >(tee >(log)) 2>&1
修改您的脚本

PRINTF=/usr/bin/printf
MSMTP=/usr/local/bin/msmtp
MSMTPCONF=/var/etc/msmtp.conf
FROM="nas4free@usinfosec.com"
TO="dpatino@usinfosec.com"
MDIR="CaseData"
SUBJECT="$MDIR Backup Report"

{

printf poo  


} > /mnt/support/logs/$SUBJECT.log
#BODY="$(cat /mnt/support/logs/test.log)"
#$PRINTF "From:$FROM\nTo:$TO\nSubject:$SUBJECT\n\n$BODY" | $MSMTP --file=$MSMTPCONF -t

在脚本的开头追加以下行

log_file_path="/tmp/output.log"
log() { while IFS='' read -r line; do echo "$line" >> "$log_file_path"; done; };
exec > >(tee >(log)) 2>&1
修改您的脚本

PRINTF=/usr/bin/printf
MSMTP=/usr/local/bin/msmtp
MSMTPCONF=/var/etc/msmtp.conf
FROM="nas4free@usinfosec.com"
TO="dpatino@usinfosec.com"
MDIR="CaseData"
SUBJECT="$MDIR Backup Report"

{

printf poo  


} > /mnt/support/logs/$SUBJECT.log
#BODY="$(cat /mnt/support/logs/test.log)"
#$PRINTF "From:$FROM\nTo:$TO\nSubject:$SUBJECT\n\n$BODY" | $MSMTP --file=$MSMTPCONF -t

一种方法是将脚本用大括号括起来并重定向输出,如下所示:

#!/bin/bash
{
# script contents here
echo running script
} > logfile

一种方法是将脚本用大括号括起来并重定向输出,如下所示:

#!/bin/bash
{
# script contents here
echo running script
} > logfile
试一试

日志显示:

+ echo 'Hello World!'
Hello World!
试一试

日志显示:

+ echo 'Hello World!'
Hello World!

我真的不明白那是怎么回事。“我把它放在剧本的顶端了?”DarylPatino在这里找到更好的解释。谢谢,这是给bash的。我需要一些东西给sh。@DarylPatino请查看更新的答案。在代码中,需要将变量移出。所以你们可以在那个范围内使用变量,我真的不明白它在做什么。“我把它放在剧本的顶端了?”DarylPatino在这里找到更好的解释。谢谢,这是给bash的。我需要一些东西给sh。@DarylPatino请查看更新的答案。在代码中,需要将变量移出。所以你可以在这个范围内使用变量。我尝试了这个方法,直到我在日志文件名中添加了一个变量。我已经将我的代码添加到问题中。将主题变量赋值移到大括号外。我尝试了这个方法,直到我在日志文件名中添加了一个变量。我已将代码添加到问题中。请将主题变量赋值移到大括号外。