Перестал работать cron в Solaris 10

Не в первый раз сталкиваюсь с проблемой — перестал работать крон в Solaris 10. Первым делом необходимо проверить состояние службы — у меня все решалось поднятием службы.

sun4:root$ svcs -p svc:/system/cron
STATE STIME FMRI
disabled сент svc:/system/cron:default

Видим что служба disable. Поднимаем

sun4:root$ svcadm enable svc:/system/cron:default

и снова проверяем состояние

sun4:root$ svcs -p svc:/system/cron
STATE STIME FMRI
online 8:21:51 svc:/system/cron:default
8:21:51 16067 cron

пронаблюдать за работой можно по логам крона

sun4:root$ tail -f /var/cron/log

Больше информации на тему по ссылке

solaris 10 syslog-ng

Появилась рабочая необходимость собрать логи с ряда сетевых устройств в замкнутой системе. Свой ноут подключить в сеть нельзя. Все компы и сервера в системе на solaris 10 update 10. Так как задачу приходилось решать не один раз — запишу последовательность действий. Чтобы в следующий раз не тупить.

Для начала необходимо убедится что установлены все необходимые пакеты.

SUNWPython (The Python interpreter, libraries and utilities)
SUNWPython-devel (The Python interpreter, libraries and utilities, platform dependent developer files, stored in /usr)
SUNWPython-share (The Python interpreter, libraries and utilities, platform independent shared files, stored in /usr/sfw/share)

проверять командой pkginfo

pkginfo |grep SUNWPython

Если все пакеты присутствуют, следует приступать к установке собственно syslog-ng сервера. Есть два варианта — собирать из исходных кодов, или установить готовый пакет. Я без труда нашел скомпилированный пакет, поэтому буду устанавливать syslogng-1.6.11-sol10-x86-local.

pkgadd -d ./syslogng-1.6.11-sol10-x86-local
mkdir /usr/local/etc
mkdir /usr/local/etc/syslog-ng
cp /usr/local/doc/syslog-ng/doc/syslog-ng.conf.solaris /usr/local/etc/syslog-ng/syslog-ng.con

Далее нужно выключить стандартный syslog сервер соляриса. Затем проверить что он выключен. (возможно впоследствии его потребуется включить)

Выключить
svcadm disable svc:/system/system-log:default
svcadm disable svc:/network/shell:defaul

Проверить
svcs svc:/system/system-log:default
svcs svc:/network/shell:default

Включить
svcadm enable svc:/system/system-log:default
svcadm enable svc:/network/shell:default

Теперь необходимо создать скрипт запуска /lib/svc/method/svc-syslog-ng

vi /lib/svc/method/svc-syslog-ng
#!/bin/sh
. /lib/svc/share/smf_include.sh
Start processes required for syslog-ng
Required for certain libgcc and eventlog libraries
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/sfw/lib
export LD_LIBRARY_PATH
if [ -x /usr/local/sbin/syslog-ng ]; then
/usr/local/sbin/syslog-ng
else
echo "syslog-ng is missing or not executable."
exit $SMF_EXIT_ERR_CONFIG
fi
exit $SMF_EXIT_OK

Задать для него владельца и права.

chown root:bin /lib/svc/method/svc-syslog-ng
chmod 755 /lib/svc/method/svc-syslog-ng

Далее необходимо создать файл SMF манифеста /var/svc/manifest/system/syslog-ng.xml

vi /var/svc/manifest/system/syslog-ng.xml
<create_default_instance enabled='false' />
<single_instance/>
<dependency name='milestone' grouping='require_all' restart_on='none' type='service'>
<service_fmri value='svc:/milestone/sysconfig' />
</dependency>
<dependency name='filesystem' grouping='require_all' restart_on='none' type='service'>
<service_fmri value='svc:/system/filesystem/local' />
</dependency>
<dependency name='autofs' grouping='optional_all' restart_on='none' type='service'>
<service_fmri value='svc:/system/filesystem/autofs' /> </dependency>
<dependency name='name-services' grouping='require_all' restart_on='none' type='service'>
<service_fmri value='svc:/milestone/name-services' />
</dependency>
<dependent name='syslog-ng_single-user' grouping='optional_all' restart_on='none'>
<service_fmri value='svc:/milestone/multi-user' />
</dependent>
<exec_method type='method' name='start' exec='/lib/svc/method/svc-syslog-ng' timeout_seconds='60' />
<exec_method type='method' name='stop' exec=':kill' timeout_seconds='60' />
<exec_method type='method' name='refresh' exec=':kill -HUP' timeout_seconds='60' />
<property_group name='general' type='framework'>
<!-- to start stop syslog daemon -->
<propval name='action_authorization' type='astring' value='solaris.smf.manage.syslog-ng' />
</property_group>
<stability value='Unstable' />
<template>
<common_name>
<loctext xml:lang='C'> syslog-ng </loctext>
</common_name>
<documentation>
<manpage title='syslog-ng' section='1M' manpath='/usr/share/man' /> </documentation>
</template>

Задать для манифеста владельца и права

chown root:sys /var/svc/manifest/system/syslog-ng.xml
chmod 444 /var/svc/manifest/system/syslog-ng.xml

Далее нужно проверить созданный манифест

svccfg validate /var/svc/manifest/system/syslog-ng.xml

Если ошибок нет — импортировать манифест в SMF

svccfg import /var/svc/manifest/system/syslog-ng.xml

Проверить что сервис появился в SMF базе

svcs syslog-ng

Включить/выключить сервис

svcadm disable syslog-ng
svcadm enable syslog-ng

Если включатся не хочет, вместо online выпадает в статус maintenence — нужно смотреть лог-файл службы

tail /var/svc/log/system-syslog-ng:default.log

Чтобы сконфигурировать сервис нужно редактировать конфиг по адресу /usr/local/etc/syslog-ng.conf Приведу пример примитивного конфига, который слушает 514й порт и записывает все что на него прилетает в файл /var/log/remote/cisco.log

vi /usr/local/etc/syslog-ng.conf

source s_udp { udp (ip ("0.0.0.0") port (514)); };
destination d_cisco { file("/var/log/remote/cisco.log"); };
log { source(s_udp); destination(d_cisco); };

Или чуть сложнее - с фильтром по адресу сети источника
source s_udp { udp (ip ("0.0.0.0") port (514)); };
destination d_cisco { file("/var/log/remote/cisco.log"); };
filter f_cisco { netmask("192.168.55.0/255.255.255.0"); };
log { source(s_udp); filter(f_cisco); destination(d_cisco); };