Нужна помощь, не могу разобраться где накосячил:
есть /usr/local/sbin/post-mount
есть /opt/etc/init.d/rc.unslungCode:#!/bin/sh /opt/etc/init.d/rc.unslung start
есть /opt/etc/init.d/S10cronCode:#!/bin/sh # Start/stop all init scripts in /opt/etc/init.d # starting them in numerical order and # stopping them in reverse numerical order # if [ $# -ne 1 ]; then printf "Usage: $0 {start|stop}\n" >&2 exit 1 fi daemons=`echo $(/usr/bin/dirname $0)/S??*` [ $1 = "stop" ] && daemons=`echo $daemons | /usr/bin/tr " " "\n" | /usr/bin/sort -r` for i in $daemons; do # Ignore dangling symlinks (if any). [ ! -f "$i" ] && continue # Write to syslog logger -t rc.unslung "$1 service $i" case "$i" in *.sh) # Source shell script for speed. ( trap - INT QUIT TSTP set $1 . $i ) ;; *) # No sh extension, so fork subprocess. $i $1 ;; esac done
ну и есть /opt/etc/crontabsCode:#!/bin/sh prefix="/opt" PATH=${prefix}/bin:${prefix}/sbin:/sbin:/bin:/usr/sbin:/usr/bin NAME=crond DAEMON=/usr/sbin/${NAME} DAEMON_OPTS="-L /dev/null" DAEMON_DIR=/var/spool/cron CRONTABS_DIR=${DAEMON_DIR}/crontabs CRONTABS_SRC=${prefix}/etc/crontabs test -x $DAEMON || exit 0 mkdir -p ${DAEMON_DIR} if [ ! -h "${CRONTABS_DIR}" ]; then ln -s ${CRONTABS_SRC} ${DAEMON_DIR} fi if [ -z "$1" ] ; then case `echo "$0" | sed 's:^.*/\(.*\):\1:g'` in S??*) rc="start" ;; K??*) rc="stop" ;; *) rc="usage" ;; esac else rc="$1" fi case "$rc" in start) echo -e -n "$NAME " if [ -n "`pidof $NAME`" ]; then echo -e "is already running." else echo -e "started." $DAEMON $DAEMON_OPTS fi ;; stop) echo -e -n "$NAME " if [ -n "`pidof $NAME`" ]; then echo -e "stopped" killall $NAME 2> /dev/null else echo -e "is not running." fi ;; restart) "$0" stop sleep 1 "$0" start ;; *) echo "Usage: $0 (start|stop|restart|usage)" ;; esac
есть /opt/etc/cron.1min/logtest.shCode:SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/sbin:/usr/local/sbin:/opt/bin:/usr/local/bin MAILTO="" HOME=/ */1 * * * * root /opt/bin/run-parts /opt/etc/cron.1min */5 * * * * root /opt/bin/run-parts /opt/etc/cron.5mins 01 * * * * root /opt/bin/run-parts /opt/etc/cron.hourly 02 4 * * * root /opt/bin/run-parts /opt/etc/cron.daily 22 4 * * 0 root /opt/bin/run-parts /opt/etc/cron.weekly 42 4 1 * * root /opt/bin/run-parts /opt/etc/cron.monthly
в логе вижу записьCode:#!/bin/sh logger -t S10Cron "test Cron.1min"
Jan 1 04:00:32 S10Cron: Crond starting
Jan 1 04:00:32 crond[471]: crond: crond (busybox 1.20.2) started, log level 8
но нет записи
test Cron.1min
Last edited by Sandr; 06-08-2013 at 21:37.
Yagi7 cdma450. 12,3 dbi, Axesstel MV110, wl500gpV2, 1.9.2.7-rtn-r4051
Антенна PETRA BB MIMO 2x2, Huawei E392, wl500gpV2 1.9.2.7-rtn-r5066
Dir-300, DD-WRT v24-sp2 4896
Sandr
Права установил?
Code:chmod +x /opt/etc/cron.1min/logtest.sh
Asus RT-N16 1.9.2.7-rtn-r5051
Asus WL500gpv2 1.9.2.7-d-r3591
Проверь еще run-parts.
на logtest.sh и run-parts права +х стоят
/opt/bin/run-parts
Удалил /opt/etc/init.d/S10cronCode:#!/bin/sh # # runparts.sh by macsat@macsat.com # intended for use with cron # # based on rc.unslung by unslung guys :-) # if [ -z "$1" ] then echo "Usage : $0 " fi RUNDIR=$1"/*" for i in $RUNDIR ;do # Ignore dangling symlinks (if any). [ ! -f "$i" ] && continue case "$i" in *.sh) # Source shell script for speed. ( logger -t "$i" "running" trap - INT QUIT TSTP set start . $i ) ;; *) # No sh extension, so fork subprocess. logger -t "$i" "running" $i start ;; esac done
вставил строчку
crond в post-mount
теперь в логе есть записи
но нет записи из logtest.shCode:Aug 6 23:10:01 crond[466]: crond: USER root pid 730 cmd root /opt/bin/run-parts /opt/etc/cron.1min Aug 6 23:10:01 crond[466]: crond: USER root pid 731 cmd root /opt/bin/run-parts /opt/etc/cron.5mins
через терминал запускаю комманду
/opt/bin/run-parts /opt/etc/cron.1min
в логеCode:Aug 6 23:58:01 /opt/etc/cron.1min//logtest.sh: running Aug 6 23:58:01 S10Cron: test Cron.1min
Yagi7 cdma450. 12,3 dbi, Axesstel MV110, wl500gpV2, 1.9.2.7-rtn-r4051
Антенна PETRA BB MIMO 2x2, Huawei E392, wl500gpV2 1.9.2.7-rtn-r5066
Dir-300, DD-WRT v24-sp2 4896
Ну а просто logtest.sh отрабатывает как надо? Если нет, то смотри настройки syslog. У меня например все сообщения от cron пишутся в /opt/var/log/cron.log
Sandr
Попробуй вместо туда же засунуть test со следующим содержимым
и посмотри создался /tmp/local/root/test.txt или нетCode:#!/bin/sh "cron.1min running" > /tmp/local/root/test.txt
Asus RT-N16 1.9.2.7-rtn-r5051
Asus WL500gpv2 1.9.2.7-d-r3591
Yagi7 cdma450. 12,3 dbi, Axesstel MV110, wl500gpV2, 1.9.2.7-rtn-r4051
Антенна PETRA BB MIMO 2x2, Huawei E392, wl500gpV2 1.9.2.7-rtn-r5066
Dir-300, DD-WRT v24-sp2 4896
Sandr
Пардон, не внимателен, crontab - какие права, если не ошибаюсь, должны быть 644.
Asus RT-N16 1.9.2.7-rtn-r5051
Asus WL500gpv2 1.9.2.7-d-r3591
run-parts тут ни при чём. Поскольку Вы используете прошивочный crond, то обязательно должно быть:
1 Содержание конфигурационной таблицы:
Как видно, содержание отличается от того, что у Вас - это потому, что а у Вас таблица для CRONCode:# ------------------------------------------------------------- # # Syntax for lines is : minute hour day month dayofweek command # # ------------------------------------------------------------- # */1 * * * * /opt/bin/run-parts /opt/etc/cron.1min */5 * * * * /opt/bin/run-parts /opt/etc/cron.5mins 01 * * * * /opt/bin/run-parts /opt/etc/cron.hourly 02 4 * * * /opt/bin/run-parts /opt/etc/cron.daily 22 4 * * 0 /opt/bin/run-parts /opt/etc/cron.weekly 42 4 1 * * /opt/bin/run-parts /opt/etc/cron.monthly
Таблица обязательно должна иметь последнюю пустую строку (иначе не будет выполняться последняя строка с инструкцией) и права доступа 600 - это справедливо и для таблицы CRON'а.
2. Имя файла конфигурационной таблицы для прошивочного crond должно быть не "crontabs" а совпадать с именем пользователя, прописанным в /etc/passwd Каждый пользователь может иметь только одну таблицу.
У Вас, похоже, файл таблицы должен иметь имя root (именно для пользователя root написана Ваша таблица для CRON"а)
3. Для crond по умочанию место хранения конфигурационной таблицы (и в Вашем S10cron это прописано) - /var/spool/cron/crontabs/, истинный путь без симлинков /tmp/etc/crontabs. Вот здесь и должна лежать Ваша таблица конфигурации с именем root
В прикрепленном файле мои выводы (перечитал все ветки по cron и crond в этом форуме) по использованию и настройке crond из прошивки вместо cron. И мой файл запуска S10crond - как работающий образец.
У меня почему-то из /var/spool/cron/crontabs/ конфигурационная таблица периодически исчезает, несмотря на наличие в .files, поэтому я ее держу в /opt/etc/crontabs (в S10cron этот путь прописан в строке CRONTABS_DIR).
P.s. для CRON имя таблицы конфигурации не crontabs а crontab. При этом есть скрипт, управляющий таблицами конфигурации (создание, редактирование и т.д.), тоже имеет имя crontab, лежит в /opt/bin - отсюда возможна путаница с этими кронтабами.
Вопрос чайника по линуксу - а можно где-то в данной прошивке прописать автозапуск крона с таблицей crontab, без флешки, но с возможностью редактирования, напр. из раздела /tmp/local/etc, т.к. он может сохраняться?
Прошу помочь разобраться, как настроить автозапуск своих скриптов, в частности, чтобы
при загрузке запускался встроенный демон crond, и как сохранить настройки crontab?
Разобрался, все работает, ниже привожу инструкцию:
Активация и включение встроенного CRON на WL500gP/RT-N16 и др на прошивке энтузиастов
---------Code:mkdir -p /var/spool/cron/crontabs crontab -e # редактируем файл /var/spool/cron/crontabs/admin к примеру добавим 00 1 * * * reboot echo "/var/spool/cron/crontabs/admin" >> /usr/local/.files mkdir -p /usr/local/sbin echo "#!/bin/sh" > /usr/local/sbin/post-boot echo "/usr/sbin/crond" >> /usr/local/sbin/post-boot chmod +x /usr/local/sbin/post-boot flashfs save # save flashfs to image file flashfs commit # save flashfs image to flash reboot; ---------- crond -fbS -l N -d N -L LOGFILE -c DIR -f Foreground -b Background (default) -S Log to syslog (default) -l Set log level. 0 is the most verbose, default 8 -d Set log level, log to stderr -L Log to file -c Working dir crontab [-c DIR] [-u USER] [-ler]|[FILE] -c Crontab directory -u User -l List crontab -e Edit crontab -r Delete crontab FILE Replace crontab by FILE ('-': stdin) min hour day month weekday comand
Last edited by Omega; 02-11-2014 at 14:14.
Доброго времени суток у меня Asus RT-N16 с Firmware:3.0.0.4.372.31 (Merlin build) понимаю прошивка не ваша и вы вправе не помогать, но все же подскажите пожалуйста
после команды
/opt/etc/init.d/S10cron reconfigure
/opt/etc/init.d/S10cron restart
выдаётся в логе
cron[25891]: (*system*) BAD FILE MODE (/opt/etc/crontab)
crontab
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/bin:/opt/sbin
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
*/1 * * * * admin /opt/bin/run-parts /opt/etc/cron.1min
*/5 * * * * admin /opt/bin/run-parts /opt/etc/cron.5mins
01 * * * * admin /opt/bin/run-parts /opt/etc/cron.hourly
02 4 * * * admin /opt/bin/run-parts /opt/etc/cron.daily
22 4 * * 0 admin /opt/bin/run-parts /opt/etc/cron.weekly
42 4 1 * * admin /opt/bin/run-parts /opt/etc/cron.monthly