以下脚本不作为 cronjob 运行

以下脚本不作为 cronjob 运行

蜗牛邮箱

#!/bin/bash
echo "Test" >> /tmp/out
/usr/bin/kdialog --title "MAIL RECIEVED" --msgbox "mail recieved!!"

crontab -e

#CronJobs located in $HOME/cronjobs/*

* * * * * /home/shadyabhi/cronjobs/snailmail.sh

它不是 root 的 crontab。上面的脚本是一个更大脚本的一部分。我无法将以下脚本作为 cron 作业运行。而当作为 cron 作业运行时,只有“Test”会附加到 /tmp/out 文件,并且不会显示 kdialog。

/var/log/crond.log

Oct 14 13:47:01 ArchLinux crond[1552]: FILE /var/spool/cron/shadyabhi USER shadyabhi PID 28844 /home/shadyabhi/cronjobs/snailmail.sh
Oct 14 13:47:01 ArchLinux crond[1552]: exit status 1 from user shadyabhi /home/shadyabhi/cronjobs/snailmail.sh
Oct 14 13:47:01 ArchLinux crond[28846]: mailing cron output for user shadyabhi /home/shadyabhi/cronjobs/snailmail.sh
Oct 14 13:47:01 ArchLinux crond[28846]: unable to exec /usr/sbin/sendmail: cron output for user shadyabhi /home/shadyabhi/cronjobs/snailmail.sh to /dev/null
Oct 14 13:48:01 ArchLinux crond[1552]: FILE /var/spool/cron/shadyabhi USER shadyabhi PID 28853 /home/shadyabhi/cronjobs/snailmail.sh
Oct 14 13:48:01 ArchLinux crond[1552]: exit status 1 from user shadyabhi /home/shadyabhi/cronjobs/snailmail.sh
Oct 14 13:48:01 ArchLinux crond[28855]: mailing cron output for user shadyabhi /home/shadyabhi/cronjobs/snailmail.sh
Oct 14 13:48:01 ArchLinux crond[28855]: unable to exec /usr/sbin/sendmail: cron output for user shadyabhi /home/shadyabhi/cronjobs/snailmail.sh to /dev/null
Oct 14 13:49:01 ArchLinux crond[1552]: FILE /var/spool/cron/shadyabhi USER shadyabhi PID 28858 /home/shadyabhi/cronjobs/snailmail.sh
Oct 14 13:49:01 ArchLinux crond[1552]: exit status 1 from user shadyabhi /home/shadyabhi/cronjobs/snailmail.sh
Oct 14 13:49:01 ArchLinux crond[28860]: mailing cron output for user shadyabhi /home/shadyabhi/cronjobs/snailmail.sh
Oct 14 13:49:01 ArchLinux crond[28860]: unable to exec /usr/sbin/sendmail: cron output for user shadyabhi /home/shadyabhi/cronjobs/snailmail.sh to /dev/null

请帮我解决这个问题。

答案1

cron 作业不会在您登录的同一 X 会话中运行,因此它不知道要与哪个 X 服务器通信。当您登录时,X 服务器的地址存储在您的 $DISPLAY 环境变量中。从 X 内部启动的任何进程都将使用该变量来确定要使用哪个服务器。

您需要找到一种方法将适当的服务器地址传递给您的 cron 作业。它可能很简单:

DISPLAY=:0 /usr/bin/kdialog --title "MAIL RECIEVED" --msgbox "mail recieved!!" &

答案2

Cron 作业不会在任何显示环境中运行,因此在其中使用任何 GUI 或 TUI 应用程序通常是不合适的。请检查 Cron 作业发送的邮件以获取成功/失败通知。

相关内容