Назад | Перейти на главную страницу

Почему мой сценарий оболочки не выполняется при запуске

Я бы хотел, чтобы на моем сервере openSuse 11.1 при запуске запускался небольшой сценарий оболочки. Я создал сценарий и поместил символическую ссылку на сценарий в /etc/init.d/rc5.d/. Тем не менее, сценарий не выполняется.

Это сценарий, который я пытаюсь запустить:

#!/bin/bash
#monitor RAID array
/sbin/mdadm --monitor --daemonize --mail=adrian@linuxplug.fli4l /dev/md0 /dev/md1 /dev/md2 /dev/md3
#start SVN server
/usr/bin/svnserve -d

Сценарий отлично работает, когда я сам запускаю его из командной строки (сервер svn и mdadm демонтируются, как и ожидалось). Но при перезагрузке сервера вроде не запускается.

Это может помочь вам понять, что я делаю не так:

linuxplug:~ # ls -l /etc/init.d/rc5.d/exe*
lrwxrwxrwx 1 root root 25 May 22 11:43 /etc/init.d/rc5.d/executeatstartup.sh -> /root/executeatstartup.sh
linuxplug:~ # ls -l /root/executeatstartup.sh
-rwxr-xr-x 1 root root 172 Apr 12 13:43 /root/executeatstartup.sh
linuxplug:~ # which svnserve
/usr/bin/svnserve

Что я делаю не так?

Редактировать: Я переименовал ссылку на сценарий оболочки следующим образом:

linuxplug:~ # ls -l /etc/init.d/rc5.d/    
lrwxrwxrwx 1 root root 25 May 22 12:03 S99executeatstartup -> /root/executeatsta
    rtup.sh

Однако сценарий по-прежнему не запускается при запуске.

Вы уже выполнили шаги, перечисленные на сайт opensuse? Это определенно должно сработать.

Есть довольно хорошее объяснение на Классные решения также

у вас должна быть ссылка с именем S99something, где S означает запуск, а 99 означает порядок, в котором запускаются сценарии в этом каталоге. см. другую ссылку в этом каталоге ...

Кроме того: вы можете переработать сценарий, чтобы учитывать аргументы запуска / остановки, и добавить символическую ссылку K99something, чтобы убедиться, что службы должным образом останавливаются при выходе из этого уровня выполнения.

Вы пробовали добавить вызов сценария в свой /etc/init.d/boot.local? Попробуйте и посмотрите, работает ли это лучше. Есть несколько других файлов boot. *, Которые запускаются на разных этапах загрузки.

Вы должны поместить эти команды в /etc/rc.local (или эквивалент в opensuse)

сценарии инициализации должны иметь определенный синтаксис. Вы можете проверить один из них для примера, но вам понадобится /etc/rc.local

Определенно должен быть способ делать то, что вы хотите из файла / etc / rc *. Еще одна альтернатива, которую вы, возможно, захотите изучить, - это cron. С помощью vixie-cron можно указать задачи, запускаемые при перезагрузке, с помощью ключевого слова @reboot в вашем crontab:

Instead of the first five fields, one of eight special strings may
appear:

string         meaning
------         -------
@reboot        Run once, at startup.
@yearly        Run once a year, "0 0 1 1 *".
@annually      (same as @yearly)
@monthly       Run once a month, "0 0 1 * *".
@weekly        Run once a week, "0 0 * * 0".
@daily         Run once a day, "0 0 * * *".
@midnight      (same as @daily)
@hourly        Run once an hour, "0 * * * *".

Приведенная выше таблица взята из сообщения в блоге Джереми Заводни, на которое мне не разрешено публиковать ссылку как новому пользователю. Поищите в Google «vixie-cron, укажите задачи при загрузке», и это будет первый результат.

Как упоминалось в статье, это отличный способ позволить пользователям запускать команды при запуске, не предоставляя им root-доступ.

Также стоит проверить / etc / inittab, чтобы убедиться, что вы по умолчанию загружаетесь на пятый уровень запуска, найдите строку вроде:

id: 2: initdefault:

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

На производных от RedHat (например, openSuSE) пятый уровень запуска является значением по умолчанию при запуске X11, третий уровень запуска используется по умолчанию для загрузки с консоли.

Есть ли в opensuse selinux? Если да, то включен ли он и соответствует ли контекст вашего сценария другим сценариям запуска? Пытаться getenforce чтобы узнать, включен ли selinux в. Пытаться ls -lZ /etc/init.d/rc5.d/ чтобы увидеть контексты скриптов