1

Я хочу использовать 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 ответ1

0

Первое, что вам нужно сделать, это установить какой-нибудь 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

Затем я решил настроить logrotate для журналов msmtp, чтобы убедиться, что файлы журналов не становятся слишком большими, а также сохранить каталог журналов немного более аккуратным. Для этого мы создаем /etc/logrotate.d/msmtp и настраиваем его следующим файлом. Обратите внимание, что это не является обязательным, вы можете не делать этого, или вы можете настроить журналы по-другому.

/var/log/msmtp/*.log {
rotate 12
monthly
compress
missingok
notifempty
}

Теперь, когда ведение журнала настроено, нам нужно указать PHP использовать msmtp, отредактировав /etc/php/7.0/apache2/php.ini и обновив путь sendmail из

sendmail_path =

в

sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -a <MSMTP_ACCOUNT_NAME> -t"

Здесь я столкнулся с проблемой, когда даже при указании имени учетной записи он неправильно отправлял электронные письма при тестировании. Вот почему строка учетной записи default: была помещена в конец файла конфигурации msmtp. Чтобы проверить конфигурацию, убедитесь, что файл PHP был сохранен, и запустите sudo service apache2 restart, затем запустите php -a и выполните следующее

mail ('personal@email.com', 'Test Subject', 'Test body text');
exit();

Любые ошибки, возникающие в этой точке, будут отображаться в выходных данных, поэтому следует упростить диагностику любых ошибок после теста.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .