Bash Shell脚本文本重定向权限

Bash Shell脚本文本重定向权限,bash,shell,ubuntu,sh,ubuntu-18.04,Bash,Shell,Ubuntu,Sh,Ubuntu 18.04,我正在尝试安装新的cyberpower UPS,我正在编写一些shell脚本来处理通知和关机。我想让脚本写入日志文件,以跟踪所有电源事件。出于某种原因,如果我直接调用该脚本,它将正确地记录到文本文件中,但是,当我的UPS调用该脚本时,它不会写入日志文件,因此我猜可能存在权限问题。这些都是在Ubuntu 18.04上运行的。另外,shutdown.sh脚本永远不会运行,无论主脚本如何调用。但是每次都会正确调用pwrstatd email.sh。任何帮助都将不胜感激 #!/bin/bash . /e

我正在尝试安装新的cyberpower UPS,我正在编写一些shell脚本来处理通知和关机。我想让脚本写入日志文件,以跟踪所有电源事件。出于某种原因,如果我直接调用该脚本,它将正确地记录到文本文件中,但是,当我的UPS调用该脚本时,它不会写入日志文件,因此我猜可能存在权限问题。这些都是在Ubuntu 18.04上运行的。另外,
shutdown.sh
脚本永远不会运行,无论主脚本如何调用。但是每次都会正确调用
pwrstatd email.sh
。任何帮助都将不胜感激

#!/bin/bash
. /etc/conf.d/pwrstatd-email.conf
EVENT="powerfail"
export EVENT

echo "power fail occured " + `date "+%Y/%b/%d-%H:%M:%S"` >> pwrlog.txt

if [ $ENABLE_EMAIL = yes ]; then
   . pwrstatd-email.sh
fi

. shutdown.sh
#!/bin/bash

. /etc/conf.d/pwrstatd-email.conf

MYHOSTNAME=`hostname`

SUBJECT="PowerPanel Notification - [$EVENT]"
FROM="PowerPanel Daemon <$SENDER_ADDRESS>"
#TO="$RECEIPT_NAME <$RECEIPT_ADDRESS>"
TO="$RECEIPT_ADDRESS"
#TO2="$RECEIPT_NAME2 <$RECEIPT_ADDRESS2>"
TO2="$RECEIPT_ADDRESS2"
MESSAGE="Warning: The $EVENT event has occurred on $MYHOSTNAME, system shutdown imminent!"

DATE=`date +'%Y/%m/%d %p %H:%M'`
test ${#DATE}

MODEL_NAME=$(echo password | sudo pwrstat -status |awk '/Model/{print $3,$4}')
REMAINING_RUNTIME=$(echo password | sudo pwrstat -status |awk '/Remaining/{print $3,$4}')
BATTERY_CAPACITY=$(echo password | sudo pwrstat -status |awk '/Capacity/{print $3,$4}')
RUNTIME=""

#MODEL_NAME=`pwrstat -status |awk '/Model/{print $3,$4}'`
#REMAINING_RUNTIME=`pwrstat -status |awk '/Remaining/{print $3,$4}'`
#BATTERY_CAPACITY=`pwrstat -status |awk '/Capacity/{print $3,$4}'`
#RUNTIME=""

if [ "$REMAINING_RUNTIME" != "none" ]
then
        RUNTIME="Remaining Runtime: $REMAINING_RUNTIME"
else
        RUNTIME="Remaining Runtime: Seconds..."
fi

DATA="========================================================
   $SUBJECT
========================================================

$MESSAGE
Time: $DATE


UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

DATA2="
$MESSAGE
Time: $DATE
UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

echo "$DATA" | mail -s "$SUBJECT" "$TO"

if [ "$ENABLE_EMAIL2" = "yes" ]
then
    echo "$DATA2" | mail "$TO2"
fi

exit 0
这里是
pwrstatd email.conf

ENABLE_EMAIL=yes
ENABLE_EMAIL2=yes
RECEIPT_NAME="System Admin"
RECEIPT_ADDRESS="email@email.com"
RECEIPT_NAME2="System Admin2"
RECEIPT_ADDRESS2="1234567891@txt.att.net"
SENDER_ADDRESS="email@gmail.com"
#!/bin/bash

. /etc/conf.d/pwrstatd-email.conf

MYHOSTNAME=`hostname`

SUBJECT="PowerPanel Notification - [$EVENT]"
FROM="PowerPanel Daemon <$SENDER_ADDRESS>"
#TO="$RECEIPT_NAME <$RECEIPT_ADDRESS>"
TO="$RECEIPT_ADDRESS"
#TO2="$RECEIPT_NAME2 <$RECEIPT_ADDRESS2>"
TO2="$RECEIPT_ADDRESS2"
MESSAGE="Warning: The $EVENT event has occurred on $MYHOSTNAME, system shutdown imminent!"

DATE=`date +'%Y/%m/%d %p %H:%M'`
test ${#DATE}

MODEL_NAME=$(echo password | sudo pwrstat -status |awk '/Model/{print $3,$4}')
REMAINING_RUNTIME=$(echo password | sudo pwrstat -status |awk '/Remaining/{print $3,$4}')
BATTERY_CAPACITY=$(echo password | sudo pwrstat -status |awk '/Capacity/{print $3,$4}')
RUNTIME=""

#MODEL_NAME=`pwrstat -status |awk '/Model/{print $3,$4}'`
#REMAINING_RUNTIME=`pwrstat -status |awk '/Remaining/{print $3,$4}'`
#BATTERY_CAPACITY=`pwrstat -status |awk '/Capacity/{print $3,$4}'`
#RUNTIME=""

if [ "$REMAINING_RUNTIME" != "none" ]
then
        RUNTIME="Remaining Runtime: $REMAINING_RUNTIME"
else
        RUNTIME="Remaining Runtime: Seconds..."
fi

DATA="========================================================
   $SUBJECT
========================================================

$MESSAGE
Time: $DATE


UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

DATA2="
$MESSAGE
Time: $DATE
UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

echo "$DATA" | mail -s "$SUBJECT" "$TO"

if [ "$ENABLE_EMAIL2" = "yes" ]
then
    echo "$DATA2" | mail "$TO2"
fi

exit 0
这里是
pwrstatd email.sh

#!/bin/bash

. /etc/conf.d/pwrstatd-email.conf

MYHOSTNAME=`hostname`

SUBJECT="PowerPanel Notification - [$EVENT]"
FROM="PowerPanel Daemon <$SENDER_ADDRESS>"
#TO="$RECEIPT_NAME <$RECEIPT_ADDRESS>"
TO="$RECEIPT_ADDRESS"
#TO2="$RECEIPT_NAME2 <$RECEIPT_ADDRESS2>"
TO2="$RECEIPT_ADDRESS2"
MESSAGE="Warning: The $EVENT event has occurred on $MYHOSTNAME, system shutdown imminent!"

DATE=`date +'%Y/%m/%d %p %H:%M'`
test ${#DATE}

MODEL_NAME=$(echo password | sudo pwrstat -status |awk '/Model/{print $3,$4}')
REMAINING_RUNTIME=$(echo password | sudo pwrstat -status |awk '/Remaining/{print $3,$4}')
BATTERY_CAPACITY=$(echo password | sudo pwrstat -status |awk '/Capacity/{print $3,$4}')
RUNTIME=""

#MODEL_NAME=`pwrstat -status |awk '/Model/{print $3,$4}'`
#REMAINING_RUNTIME=`pwrstat -status |awk '/Remaining/{print $3,$4}'`
#BATTERY_CAPACITY=`pwrstat -status |awk '/Capacity/{print $3,$4}'`
#RUNTIME=""

if [ "$REMAINING_RUNTIME" != "none" ]
then
        RUNTIME="Remaining Runtime: $REMAINING_RUNTIME"
else
        RUNTIME="Remaining Runtime: Seconds..."
fi

DATA="========================================================
   $SUBJECT
========================================================

$MESSAGE
Time: $DATE


UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

DATA2="
$MESSAGE
Time: $DATE
UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

echo "$DATA" | mail -s "$SUBJECT" "$TO"

if [ "$ENABLE_EMAIL2" = "yes" ]
then
    echo "$DATA2" | mail "$TO2"
fi

exit 0
#/bin/bash
. /etc/conf.d/pwrstatd-email.conf
MYHOSTNAME=`hostname`
SUBJECT=“PowerPanel通知-[$EVENT]”
FROM=“PowerPanel守护程序”
#TO=“$RECEIPT\u NAME”
TO=“$RECEIPT\u ADDRESS”
#TO2=“$RECEIPT\u NAME2”
TO2=“$RECEIPT\u ADDRESS2”
MESSAGE=“警告:$MYHOSTNAME上发生了$EVENT事件,系统即将关闭!”
日期=`DATE+'%Y/%m/%d%p%H:%m'`
测试${#日期}
MODEL_NAME=$(回显密码| sudo pwrstat-status | awk'/MODEL/{print$3,$4}')
剩余的_运行时=$(回显密码| sudo pwrstat-status | awk'/剩余/{print$3,$4}')
电池容量=$(回显密码| sudo pwrstat-状态| awk'/容量/{打印$3,$4}')
RUNTIME=“”
#MODEL_NAME=`pwrstat-status | awk'/MODEL/{print$3,$4}'`
#剩余运行时=`pwrstat-status | awk'/REMAINING/{print$3,$4}'`
#电池容量=`pwrstat-status | awk'/容量/{打印$3,$4}'`
#RUNTIME=“”
如果[“$REMAINING_RUNTIME”!=“none”]
然后
RUNTIME=“剩余运行时:$Remaining\u运行时”
其他的
RUNTIME=“剩余运行时间:秒…”
fi
数据=”========================================================
$SUBJECT
========================================================
$MESSAGE
时间:$DATE
UPS型号名称:$Model\u Name
电池容量:$电池容量
$RUNTIME“
数据2=”
$MESSAGE
时间:$DATE
UPS型号名称:$Model\u Name
电池容量:$电池容量
$RUNTIME“
echo“$DATA”| mail-s“$SUBJECT”“$TO”
如果[“$ENABLE_EMAIL2”=“yes”]
然后
回显“$DATA2”|邮件“$TO2”
fi
出口0

两个shell脚本都位于
/urs/local/bin/
中,电子邮件配置文件位于
/etc/conf.d/
中。UPS通过USB连接到我的电脑,并调用脚本。我不确定UPS在调用脚本时使用的是什么用户

您可以在脚本顶部附近添加以下内容以帮助调试:

#!/bin/bash

. /etc/conf.d/pwrstatd-email.conf

MYHOSTNAME=`hostname`

SUBJECT="PowerPanel Notification - [$EVENT]"
FROM="PowerPanel Daemon <$SENDER_ADDRESS>"
#TO="$RECEIPT_NAME <$RECEIPT_ADDRESS>"
TO="$RECEIPT_ADDRESS"
#TO2="$RECEIPT_NAME2 <$RECEIPT_ADDRESS2>"
TO2="$RECEIPT_ADDRESS2"
MESSAGE="Warning: The $EVENT event has occurred on $MYHOSTNAME, system shutdown imminent!"

DATE=`date +'%Y/%m/%d %p %H:%M'`
test ${#DATE}

MODEL_NAME=$(echo password | sudo pwrstat -status |awk '/Model/{print $3,$4}')
REMAINING_RUNTIME=$(echo password | sudo pwrstat -status |awk '/Remaining/{print $3,$4}')
BATTERY_CAPACITY=$(echo password | sudo pwrstat -status |awk '/Capacity/{print $3,$4}')
RUNTIME=""

#MODEL_NAME=`pwrstat -status |awk '/Model/{print $3,$4}'`
#REMAINING_RUNTIME=`pwrstat -status |awk '/Remaining/{print $3,$4}'`
#BATTERY_CAPACITY=`pwrstat -status |awk '/Capacity/{print $3,$4}'`
#RUNTIME=""

if [ "$REMAINING_RUNTIME" != "none" ]
then
        RUNTIME="Remaining Runtime: $REMAINING_RUNTIME"
else
        RUNTIME="Remaining Runtime: Seconds..."
fi

DATA="========================================================
   $SUBJECT
========================================================

$MESSAGE
Time: $DATE


UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

DATA2="
$MESSAGE
Time: $DATE
UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

echo "$DATA" | mail -s "$SUBJECT" "$TO"

if [ "$ENABLE_EMAIL2" = "yes" ]
then
    echo "$DATA2" | mail "$TO2"
fi

exit 0
id>/tmp/ups.txt
声明-x>>/tmp/ups.txt
一旦UPS触发脚本,请查看
/tmp/UPS.txt
的内容

#!/bin/bash

. /etc/conf.d/pwrstatd-email.conf

MYHOSTNAME=`hostname`

SUBJECT="PowerPanel Notification - [$EVENT]"
FROM="PowerPanel Daemon <$SENDER_ADDRESS>"
#TO="$RECEIPT_NAME <$RECEIPT_ADDRESS>"
TO="$RECEIPT_ADDRESS"
#TO2="$RECEIPT_NAME2 <$RECEIPT_ADDRESS2>"
TO2="$RECEIPT_ADDRESS2"
MESSAGE="Warning: The $EVENT event has occurred on $MYHOSTNAME, system shutdown imminent!"

DATE=`date +'%Y/%m/%d %p %H:%M'`
test ${#DATE}

MODEL_NAME=$(echo password | sudo pwrstat -status |awk '/Model/{print $3,$4}')
REMAINING_RUNTIME=$(echo password | sudo pwrstat -status |awk '/Remaining/{print $3,$4}')
BATTERY_CAPACITY=$(echo password | sudo pwrstat -status |awk '/Capacity/{print $3,$4}')
RUNTIME=""

#MODEL_NAME=`pwrstat -status |awk '/Model/{print $3,$4}'`
#REMAINING_RUNTIME=`pwrstat -status |awk '/Remaining/{print $3,$4}'`
#BATTERY_CAPACITY=`pwrstat -status |awk '/Capacity/{print $3,$4}'`
#RUNTIME=""

if [ "$REMAINING_RUNTIME" != "none" ]
then
        RUNTIME="Remaining Runtime: $REMAINING_RUNTIME"
else
        RUNTIME="Remaining Runtime: Seconds..."
fi

DATA="========================================================
   $SUBJECT
========================================================

$MESSAGE
Time: $DATE


UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

DATA2="
$MESSAGE
Time: $DATE
UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

echo "$DATA" | mail -s "$SUBJECT" "$TO"

if [ "$ENABLE_EMAIL2" = "yes" ]
then
    echo "$DATA2" | mail "$TO2"
fi

exit 0

问题很可能是以下因素的结合:

#!/bin/bash

. /etc/conf.d/pwrstatd-email.conf

MYHOSTNAME=`hostname`

SUBJECT="PowerPanel Notification - [$EVENT]"
FROM="PowerPanel Daemon <$SENDER_ADDRESS>"
#TO="$RECEIPT_NAME <$RECEIPT_ADDRESS>"
TO="$RECEIPT_ADDRESS"
#TO2="$RECEIPT_NAME2 <$RECEIPT_ADDRESS2>"
TO2="$RECEIPT_ADDRESS2"
MESSAGE="Warning: The $EVENT event has occurred on $MYHOSTNAME, system shutdown imminent!"

DATE=`date +'%Y/%m/%d %p %H:%M'`
test ${#DATE}

MODEL_NAME=$(echo password | sudo pwrstat -status |awk '/Model/{print $3,$4}')
REMAINING_RUNTIME=$(echo password | sudo pwrstat -status |awk '/Remaining/{print $3,$4}')
BATTERY_CAPACITY=$(echo password | sudo pwrstat -status |awk '/Capacity/{print $3,$4}')
RUNTIME=""

#MODEL_NAME=`pwrstat -status |awk '/Model/{print $3,$4}'`
#REMAINING_RUNTIME=`pwrstat -status |awk '/Remaining/{print $3,$4}'`
#BATTERY_CAPACITY=`pwrstat -status |awk '/Capacity/{print $3,$4}'`
#RUNTIME=""

if [ "$REMAINING_RUNTIME" != "none" ]
then
        RUNTIME="Remaining Runtime: $REMAINING_RUNTIME"
else
        RUNTIME="Remaining Runtime: Seconds..."
fi

DATA="========================================================
   $SUBJECT
========================================================

$MESSAGE
Time: $DATE


UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

DATA2="
$MESSAGE
Time: $DATE
UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

echo "$DATA" | mail -s "$SUBJECT" "$TO"

if [ "$ENABLE_EMAIL2" = "yes" ]
then
    echo "$DATA2" | mail "$TO2"
fi

exit 0
   . pwrstatd-email.sh
以及
pwrstatd email.sh
末尾的以下内容:

#!/bin/bash

. /etc/conf.d/pwrstatd-email.conf

MYHOSTNAME=`hostname`

SUBJECT="PowerPanel Notification - [$EVENT]"
FROM="PowerPanel Daemon <$SENDER_ADDRESS>"
#TO="$RECEIPT_NAME <$RECEIPT_ADDRESS>"
TO="$RECEIPT_ADDRESS"
#TO2="$RECEIPT_NAME2 <$RECEIPT_ADDRESS2>"
TO2="$RECEIPT_ADDRESS2"
MESSAGE="Warning: The $EVENT event has occurred on $MYHOSTNAME, system shutdown imminent!"

DATE=`date +'%Y/%m/%d %p %H:%M'`
test ${#DATE}

MODEL_NAME=$(echo password | sudo pwrstat -status |awk '/Model/{print $3,$4}')
REMAINING_RUNTIME=$(echo password | sudo pwrstat -status |awk '/Remaining/{print $3,$4}')
BATTERY_CAPACITY=$(echo password | sudo pwrstat -status |awk '/Capacity/{print $3,$4}')
RUNTIME=""

#MODEL_NAME=`pwrstat -status |awk '/Model/{print $3,$4}'`
#REMAINING_RUNTIME=`pwrstat -status |awk '/Remaining/{print $3,$4}'`
#BATTERY_CAPACITY=`pwrstat -status |awk '/Capacity/{print $3,$4}'`
#RUNTIME=""

if [ "$REMAINING_RUNTIME" != "none" ]
then
        RUNTIME="Remaining Runtime: $REMAINING_RUNTIME"
else
        RUNTIME="Remaining Runtime: Seconds..."
fi

DATA="========================================================
   $SUBJECT
========================================================

$MESSAGE
Time: $DATE


UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

DATA2="
$MESSAGE
Time: $DATE
UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

echo "$DATA" | mail -s "$SUBJECT" "$TO"

if [ "$ENABLE_EMAIL2" = "yes" ]
then
    echo "$DATA2" | mail "$TO2"
fi

exit 0
exit 0
由于主脚本
source
使用
关闭
pwrstatd email.sh
脚本,因此
退出0
将终止主脚本。因此,
shutdown.sh
将无法运行

#!/bin/bash

. /etc/conf.d/pwrstatd-email.conf

MYHOSTNAME=`hostname`

SUBJECT="PowerPanel Notification - [$EVENT]"
FROM="PowerPanel Daemon <$SENDER_ADDRESS>"
#TO="$RECEIPT_NAME <$RECEIPT_ADDRESS>"
TO="$RECEIPT_ADDRESS"
#TO2="$RECEIPT_NAME2 <$RECEIPT_ADDRESS2>"
TO2="$RECEIPT_ADDRESS2"
MESSAGE="Warning: The $EVENT event has occurred on $MYHOSTNAME, system shutdown imminent!"

DATE=`date +'%Y/%m/%d %p %H:%M'`
test ${#DATE}

MODEL_NAME=$(echo password | sudo pwrstat -status |awk '/Model/{print $3,$4}')
REMAINING_RUNTIME=$(echo password | sudo pwrstat -status |awk '/Remaining/{print $3,$4}')
BATTERY_CAPACITY=$(echo password | sudo pwrstat -status |awk '/Capacity/{print $3,$4}')
RUNTIME=""

#MODEL_NAME=`pwrstat -status |awk '/Model/{print $3,$4}'`
#REMAINING_RUNTIME=`pwrstat -status |awk '/Remaining/{print $3,$4}'`
#BATTERY_CAPACITY=`pwrstat -status |awk '/Capacity/{print $3,$4}'`
#RUNTIME=""

if [ "$REMAINING_RUNTIME" != "none" ]
then
        RUNTIME="Remaining Runtime: $REMAINING_RUNTIME"
else
        RUNTIME="Remaining Runtime: Seconds..."
fi

DATA="========================================================
   $SUBJECT
========================================================

$MESSAGE
Time: $DATE


UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

DATA2="
$MESSAGE
Time: $DATE
UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

echo "$DATA" | mail -s "$SUBJECT" "$TO"

if [ "$ENABLE_EMAIL2" = "yes" ]
then
    echo "$DATA2" | mail "$TO2"
fi

exit 0

您将希望使用
/pwrstatd email.sh
/path/to/pwrstatd email.sh
,以适合您的情况为准,将其作为一个程序调用。

我想我终于找到了答案,但答案肯定不太妙。因此,如果有人提出建议,我会非常乐意接受。不知道为什么权限会变得如此奇怪,但这一点目前正在发挥作用:

#!/bin/bash

. /etc/conf.d/pwrstatd-email.conf

MYHOSTNAME=`hostname`

SUBJECT="PowerPanel Notification - [$EVENT]"
FROM="PowerPanel Daemon <$SENDER_ADDRESS>"
#TO="$RECEIPT_NAME <$RECEIPT_ADDRESS>"
TO="$RECEIPT_ADDRESS"
#TO2="$RECEIPT_NAME2 <$RECEIPT_ADDRESS2>"
TO2="$RECEIPT_ADDRESS2"
MESSAGE="Warning: The $EVENT event has occurred on $MYHOSTNAME, system shutdown imminent!"

DATE=`date +'%Y/%m/%d %p %H:%M'`
test ${#DATE}

MODEL_NAME=$(echo password | sudo pwrstat -status |awk '/Model/{print $3,$4}')
REMAINING_RUNTIME=$(echo password | sudo pwrstat -status |awk '/Remaining/{print $3,$4}')
BATTERY_CAPACITY=$(echo password | sudo pwrstat -status |awk '/Capacity/{print $3,$4}')
RUNTIME=""

#MODEL_NAME=`pwrstat -status |awk '/Model/{print $3,$4}'`
#REMAINING_RUNTIME=`pwrstat -status |awk '/Remaining/{print $3,$4}'`
#BATTERY_CAPACITY=`pwrstat -status |awk '/Capacity/{print $3,$4}'`
#RUNTIME=""

if [ "$REMAINING_RUNTIME" != "none" ]
then
        RUNTIME="Remaining Runtime: $REMAINING_RUNTIME"
else
        RUNTIME="Remaining Runtime: Seconds..."
fi

DATA="========================================================
   $SUBJECT
========================================================

$MESSAGE
Time: $DATE


UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

DATA2="
$MESSAGE
Time: $DATE
UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

echo "$DATA" | mail -s "$SUBJECT" "$TO"

if [ "$ENABLE_EMAIL2" = "yes" ]
then
    echo "$DATA2" | mail "$TO2"
fi

exit 0
sudo echo“发生电源故障”+
date“+%Y/%b/%d-%H:%M:%S”
| sudo dd of=/usr/local/bin/pwrlog.txt of lag=append conv=notrunc

#!/bin/bash

. /etc/conf.d/pwrstatd-email.conf

MYHOSTNAME=`hostname`

SUBJECT="PowerPanel Notification - [$EVENT]"
FROM="PowerPanel Daemon <$SENDER_ADDRESS>"
#TO="$RECEIPT_NAME <$RECEIPT_ADDRESS>"
TO="$RECEIPT_ADDRESS"
#TO2="$RECEIPT_NAME2 <$RECEIPT_ADDRESS2>"
TO2="$RECEIPT_ADDRESS2"
MESSAGE="Warning: The $EVENT event has occurred on $MYHOSTNAME, system shutdown imminent!"

DATE=`date +'%Y/%m/%d %p %H:%M'`
test ${#DATE}

MODEL_NAME=$(echo password | sudo pwrstat -status |awk '/Model/{print $3,$4}')
REMAINING_RUNTIME=$(echo password | sudo pwrstat -status |awk '/Remaining/{print $3,$4}')
BATTERY_CAPACITY=$(echo password | sudo pwrstat -status |awk '/Capacity/{print $3,$4}')
RUNTIME=""

#MODEL_NAME=`pwrstat -status |awk '/Model/{print $3,$4}'`
#REMAINING_RUNTIME=`pwrstat -status |awk '/Remaining/{print $3,$4}'`
#BATTERY_CAPACITY=`pwrstat -status |awk '/Capacity/{print $3,$4}'`
#RUNTIME=""

if [ "$REMAINING_RUNTIME" != "none" ]
then
        RUNTIME="Remaining Runtime: $REMAINING_RUNTIME"
else
        RUNTIME="Remaining Runtime: Seconds..."
fi

DATA="========================================================
   $SUBJECT
========================================================

$MESSAGE
Time: $DATE


UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

DATA2="
$MESSAGE
Time: $DATE
UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

echo "$DATA" | mail -s "$SUBJECT" "$TO"

if [ "$ENABLE_EMAIL2" = "yes" ]
then
    echo "$DATA2" | mail "$TO2"
fi

exit 0

dd
似乎成功了

几个问题:UPS如何“调用”这个脚本?您的用户id与UPS用户id是什么?你的工作目录是什么?pwrstatd email.sh的内容是什么?我添加了一些编辑。脚本位于
/usr/local/bin/
我不确定UPS调用脚本时使用了什么,文档不是非常清晰,细节非常重要。你安装了一个软件包,还是使用了Ubuntu的内置功能?我从这个问题下载的软件包可能更适合。谢谢,这有点帮助,但我能告诉你它是以
root
身份运行的,所以不知道为什么它不能写入该文件谢谢,我确实得出了关于退出0的结论,我从
pwrstatd email.sh
文件中删除了它,并且能够运行
shutdown.sh
脚本。但是,我对
.txt
文件的权限仍然存在问题。如果您运行
id>/tmp/ups.txt
code,
id
将告诉您脚本以什么用户身份运行。它可能不是以
root
的身份运行的,但我将结束这个问题。我同意rtx13,这可能更适合超级用户。有几个建议。1.不要将日志文件放入
/usr/local/bin
,因为该目录是为程序保留的。日志可能会进入
/var/log/ups
或类似目录。2.如果将
/var/log/ups
创建为root用户,然后将该目录的所有者更改为与运行脚本的用户相同的用户,则您将没有写入文件的权限,也不必使用
sudo dd
#!/bin/bash

. /etc/conf.d/pwrstatd-email.conf

MYHOSTNAME=`hostname`

SUBJECT="PowerPanel Notification - [$EVENT]"
FROM="PowerPanel Daemon <$SENDER_ADDRESS>"
#TO="$RECEIPT_NAME <$RECEIPT_ADDRESS>"
TO="$RECEIPT_ADDRESS"
#TO2="$RECEIPT_NAME2 <$RECEIPT_ADDRESS2>"
TO2="$RECEIPT_ADDRESS2"
MESSAGE="Warning: The $EVENT event has occurred on $MYHOSTNAME, system shutdown imminent!"

DATE=`date +'%Y/%m/%d %p %H:%M'`
test ${#DATE}

MODEL_NAME=$(echo password | sudo pwrstat -status |awk '/Model/{print $3,$4}')
REMAINING_RUNTIME=$(echo password | sudo pwrstat -status |awk '/Remaining/{print $3,$4}')
BATTERY_CAPACITY=$(echo password | sudo pwrstat -status |awk '/Capacity/{print $3,$4}')
RUNTIME=""

#MODEL_NAME=`pwrstat -status |awk '/Model/{print $3,$4}'`
#REMAINING_RUNTIME=`pwrstat -status |awk '/Remaining/{print $3,$4}'`
#BATTERY_CAPACITY=`pwrstat -status |awk '/Capacity/{print $3,$4}'`
#RUNTIME=""

if [ "$REMAINING_RUNTIME" != "none" ]
then
        RUNTIME="Remaining Runtime: $REMAINING_RUNTIME"
else
        RUNTIME="Remaining Runtime: Seconds..."
fi

DATA="========================================================
   $SUBJECT
========================================================

$MESSAGE
Time: $DATE


UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

DATA2="
$MESSAGE
Time: $DATE
UPS Model Name: $MODEL_NAME
Battery Capacity: $BATTERY_CAPACITY
$RUNTIME"

echo "$DATA" | mail -s "$SUBJECT" "$TO"

if [ "$ENABLE_EMAIL2" = "yes" ]
then
    echo "$DATA2" | mail "$TO2"
fi

exit 0