
Я использую CentOS 5.3 и хотел бы регистрировать все сообщения от демона "at". Мой syslog.conf содержит следующую запись:
cron.* /var/log/cron
Я предположил, что строка cron в syslog относится ко всему семейству "cron, anacron, at и batch". Однако, в то время как действия cron и anacron, похоже, записываются в журнал, действия "at" не записываются в журнал. Как мне записать действия atd?
Спасибо за внимание
(Добавлено) Я хотел бы добавить содержимое моего syslog.conf на случай возникновения ошибки:
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
решение1
Глядя на исходный код программы 'at' (из репозитория исходного кода CentOS 5.3) , похоже, что он действительно регистрирует данные в системном журнале, но регистрируются только фатальные ошибки, касающиеся самого демона at (например, если вы пытаетесь запустить 2 демона at одновременно).
Однако выполнение процесса, результирующий код возврата и стандартная ошибка/вывод вообще не регистрируются в syslog. Даже при включении отладки (что требует перекомпиляции) сообщения журнала не очень информативны (для конечных пользователей) и пишут что-то вроде:
atd[24116]: pid 24121 exited with status 0.
Это не поможет вам определить, какая команда была запущена, каким пользователем или каков был ее стандартный вывод/ошибка.
атдделаетотправить уведомление по электронной почте пользователю, запросившему команду, в случае, если команда не удалась или выдала что-либо в своем стандартном выводе/ошибке. Но для команд, которые успешно выполнены без какого-либо вывода, почта не отправляется. Вы можете изменить это с помощью флага -m.
Отв(1):
-m Отправить пользователю письмо после завершения задания, даже если не было выходных данных.
решение2
Для таких случаев я буду использовать обертку вокруг команды, которая записывает данные в syslog. Например:
#!/bin/bash
logger -i -t mycmd Starting
/bin/somecommand
logger -i -t mycmd Completed
exit 0
Затем из cron, at и т. д. я вместо этого вызову скрипт-оболочку.
Я понимаю, что это скорее обходной путь, чем решение, но свою задачу он выполняет.
решение3
/var/log/secure(RHEL)
atd регистрирует данные через PAM, проверьте syslog.conf, чтобы узнать, куда ведет журнал pam.
решение4
В соответствии сatd(8)
, он уже регистрируется в syslog, вам просто нужно убедиться, что у вас нет плохих правил syslog.
Возможно, сначала опубликуйте свой syslog.conf
файл здесь.
Также обратите внимание, что atd
нельзя настроить назначение конкретного средства ведения журнала, но это не должно стать проблемой, вам просто нужно убедиться, что конфигурация вашего системного журнала правильная.