我希望使用 cron 在每天的特定时间锁定屏幕。我有一个非常简单的脚本,其中包含以下内容:(gnome-screensaver-command -l
锁定屏幕)。我知道这个程序有效,因为我已经通过终端手动运行它并且成功了,但是,cron 似乎无法锁定屏幕。如果有帮助的话,我正在使用 Ubuntu 16.04 LTS。我的 crontab 如下。
MALTO=arctic_hen7
SHELL=/bin/bash
25 7 * * * export DISPLAY=:0 && /home/arctic_hen7/bin/lockscreen
我尝试过重新启动 cron 并直接通过 cron 运行命令(而不是运行文件),但这两种方法都没有奏效。我尝试过更改任务执行的时间并等待下一分钟,但它从未执行,然而,当我运行时service cron status
,我得到了这个:
(arctic_hen7) RELOAD (crontabs/arctic_hen7)
pam_unix(cron:session): session opened for user arctic_hen7 by (uid=0)
(arctic_hen7) CMD (export DISPLAY=:0 && /home/arctic_hen7/bin/lockscreen)
(CRON) info (No MTA installed, discarding output)
我想知道我是否做错了什么,或者是否有其他方法可以让 cron 锁定屏幕。如果可以的话,我愿意听取有关替代调度应用程序的建议,但是最好是关于 cron 的答案。
答案1
您需要做的第一件事是安装某种 MTA(邮件传输代理),以便您可以通过电子邮件收到 cron 命令的输出。就目前情况而言,关键诊断信息将被丢弃,因此您将很难修复问题。我建议使用 mssmtp 作为一个简单的起点。
mssmtp 设置说明复制自这里为防止链接失效:
首先,我们需要安装 3 个包:
sudo apt-get install msmtp msmtp-mta ca-certificates
安装这些后,需要一个默认配置。默认情况下,msmtp 将查看 /etc/msmtprc,因此我使用 vim 创建了它,尽管任何文本编辑器都可以完成此操作。此文件看起来像这样:
# Set defaults.
defaults
# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
# Setup WP account's settings.
account <MSMTP_ACCOUNT_NAME>
host smtp.gmail.com
port 587
auth login
user <EMAIL_USERNAME>
password <PASSWORD>
from <FROM_ADDRESS>
logfile /var/log/msmtp/msmtp.log
account default : <MSMTP_ACCOUNT_NAME>
任何大写项目(即<PASSWORD>
)都是需要根据您的配置进行替换的内容。例外是日志文件,当然,您可以将其放在您希望记录任何 msmtp 活动/警告/错误的位置。
一旦保存了该文件,我们将更新上述配置文件的权限 - 如果该文件的权限太开放,msmtp 将无法运行 - 并为日志文件创建目录。
sudo mkdir /var/log/msmtp
sudo chown -R www-data:adm /var/log/msmtp
sudo chmod 0600 /etc/msmtprc
接下来,我选择为 msmtp 日志配置 logrotate,以确保日志文件不会变得太大,同时保持日志目录稍微整洁一些。为此,我们创建 /etc/logrotate.d/msmtp 并使用以下文件对其进行配置。请注意,这是可选的,您可以选择不这样做,也可以选择以不同的方式配置日志。
/var/log/msmtp/*.log {
rotate 12
monthly
compress
missingok
notifempty
}
现在日志已配置完毕,我们需要通过编辑 /etc/php/7.0/apache2/php.ini 并更新 sendmail 路径来告诉 PHP 使用 msmtp
sendmail_path =
到
sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -a <MSMTP_ACCOUNT_NAME> -t"
在这里我确实遇到了一个问题,即使我指定了帐户名,当我测试它时它也无法正确发送电子邮件。这就是为什么将 account default : 这一行放在 msmtp 配置文件的末尾。要测试配置,请确保已保存 PHP 文件并运行 sudo service apache2 restart,然后运行 php -a 并执行以下命令
mail ('[email protected]', 'Test Subject', 'Test body text');
exit();
此时发生的任何错误都将显示在输出中,因此应该可以相对容易地诊断测试后的任何错误。