Автоматизация и shell

Cron, timers, переменные окружения, алиасы и история.

Cron

У cron бедное окружение: абсолютные пути и явные логи помогают быстрее отлаживать.

crontab -l
crontab -e
sudo crontab -l
grep CRON /var/log/syslog
run-parts --test /etc/cron.daily
systemctl status cron --no-pager

systemd timers

Для серверных регулярных задач timers часто удобнее cron: есть статус, логи и зависимости.

systemctl list-timers --all
systemctl status TIMER_NAME.timer --no-pager
systemctl start TIMER_NAME.timer
systemctl enable TIMER_NAME.timer
journalctl -u TIMER_NAME.service -n 80 --no-pager
systemd-analyze calendar "Mon *-*-* 03:00:00"

Одноразовые задачи

`at` удобен для отложенного действия, если не нужен постоянный timer.

at now + 10 minutes
atq
atrm JOB_ID
echo "systemctl restart nginx" | at 03:00
batch

Shell-профиль

Не класть секреты в общий профиль. Для командного удобства достаточно алиасов и переменных.

env
printenv PATH
export EDITOR=nano
alias ll='ls -lah'
unalias ll
source ~/.bashrc
history | tail -n 40

Мини-скрипты

В скриптах для администрирования включать строгий режим и понятный вывод ошибок.

bash -n script.sh
shellcheck script.sh
chmod +x script.sh
./script.sh
set -euo pipefail
trap 'echo failed at line $LINENO' ERR

Что искать дальше

Полезные запросы: `systemd timer example`, `cron environment PATH`, `bash strict mode`, `shellcheck examples`.