将 smartd 绑定到用户会话

将 smartd 绑定到用户会话

我想在 DE (Gnome3) 中看到 smartd 通知。因此,我已配置 smartd 来执行使用 notification-send 通知所有登录用户的自定义脚本:

smartd.conf

/dev/sda -m root -M test -M exec /etc/smartmontools/smartd_warning.d/notify -a -n standby,10,q

smartd_warning.d/通知

#!/usr/bin/env sh

IFS=$'\n'
for LINE in `w -hs`
do
    USER=`echo $LINE | awk '{print $1}'`
    USER_ID=`id -u $USER`
    DISP_ID=`echo $LINE | awk '{print $8}'`
    sudo -u $USER DISPLAY=$DISP_ID DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_ID/bus notify-send "S.M.A.R.T Error ($SMARTD_FAILTYPE)" "$SMARTD_MESSAGE" --icon=dialog-warning
done

只有smartd当我登录系统时重新启动它才能正常工作。显然它不能在启动时工作,因为smartd在任何用户登录系统之前启动。

[Unit]
Description=Self Monitoring and Reporting Technology (SMART) Daemon
Documentation=man:smartd(8) man:smartd.conf(5)

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/smartmontools
ExecStart=/usr/sbin/smartd -n $smartd_opts
ExecReload=/bin/kill -HUP $MAINPID
StandardOutput=syslog

[Install]
WantedBy=multi-user.target

如何将 smartd 服务绑定到用户会话以查看这些通知?

答案1

您可以尝试更改WantedBygraphical.targetdefault.target根据

简短的解释;multi-user.target意味着系统已启动,但并不意味着用户已登录,graphical.target意味着本地用户登录,并且default.target是通用别名graphical.target,但也可能是其他值的别名。

另外,如果您想简单地确保没有丢失任何通知,您也可以将echo通过通知发送发送到文件的相同数据发送到文件。应该是这样的:(
echo "S.M.A.R.T Error ($SMARTD_FAILTYPE)" "$SMARTD_MESSAGE" >> /"YourPathHere"/smartd.log
请确保使用脚本可以写入的路径)

相关内容