bash
встроенный pushd
с параметрами +
и -
может вращать стек каталогов. Синтаксис может немного сбивать с толку, возможно, потому, что этот стек представляет собой массив на основе нуля . Эти простые функции-оболочки циклически перемещаются по стеку каталогов:
# cd to next directory in stack (left rotate)
ncd(){ pushd +1 > /dev/null ; }
# cd to previous directory in stack (right rotate)
pcd(){ pushd -0 > /dev/null ; }
Тест: устанавливает стек из четырех каталогов.
dirs -c # clear directory stack
cd /home ; pushd /etc ; pushd /bin ; pushd /tmp
Теперь / tmp - это текущий каталог, а стек выглядит так:
/tmp /bin /etc /home
Перейти к следующему каталогу в стеке (и показать его) четыре раза:
ncd ; pwd ; ncd ; pwd ; ncd ; pwd ; ncd ; pwd
Вывод:
/bin
/etc
/home
/tmp
Перейти в предыдущий каталог в стеке (и показать его) четыре раза:
pcd ; pwd ; pcd ; pwd ; pcd ; pwd ; pcd ; pwd
Вывод:
/home
/etc
/bin
/tmp
Примечание на cd -
: Подстановочный знак ответ помог проиллюстрировать, как cd -
не использует массив $ DIRSTACK (он использует переменную $ OLDPW ), поэтому cd -
не использует ' t effect $ DIRSTACK так же, как и своп на основе стека. Чтобы исправить это, вот простая функция свопа на основе $ DIRSTACK :
scd() { { pushd ${DIRSTACK[1]} ; popd -n +2 ; } > /dev/null ; }
Тест:
dirs -c; cd /tmp; \
pushd /bin; \
pushd /etc; \
pushd /lib; \
pushd /home; \
scd; dirs; scd; dirs
Вывод:
/bin /tmp
/etc /bin /tmp
/lib /etc /bin /tmp
/home /lib /etc /bin /tmp
/lib /home /etc /bin /tmp
/home /lib /etc /bin /tmp
Посмотрите на init , который является традиционным стартером процесса и запускает сценарии из папок /etc/init.d
, /etc/rc1.d
и т. Д. . и /etc/rc.local
, что, вероятно, является желаемым местом.
В некоторых дистрибутивах вместо этого используется выскочка - если это так, посмотрите документацию по этому поводу.
В любом случае точные пути могут отличаться в зависимости от дистрибутива, но этого должно быть достаточно, чтобы вы начали.
В / etc / inittab
найдите строку вида id: 3: initdefault:
. Число, вероятно, будет 3 или 5, но может быть 2 или 4. Число в этой строке - уровень выполнения по умолчанию. Скорее всего, это не 2, поэтому ваши скрипты в rc2.d не запустятся.
Поместите ваш сценарий в каталог rcN.d, который соответствует номеру в строке initdefault
.
В принципе, rc.local - лучший выбор, но rc.local настолько сильно различается от дистрибутива к дистрибутиву (иногда это каталог, иногда скрипт, иногда он вообще не настроен), что, не зная вашего дистрибутива, он проще просто поставить его на правильный уровень выполнения. Вы можете попробовать man rc.local
и посмотреть, что там написано в вашей системе. Если ваша система поддерживает rc.local как директрой, поместите туда свой скрипт и не беспокойтесь об уровнях выполнения.
Также убедитесь, что ваш скрипт принадлежит пользователю root и имеет права 755 (если вы хотите, чтобы кто-нибудь мог его запустить) или 744.
Попробуйте проверить, запускаются ли ваши сценарии (например, но вставив в них touch /var/tmp/startup.script
). Все ли команды в ваших сценариях находятся в поисковом патче во время загрузки?
Уровень выполнения 2 мне кажется необычным. 3 должно быть нормально для Linux без графического интерфейса. Какой дистрибутив и версию вы используете?
Добавление скрипта запуска
Этот метод работает с Red Hat, Fedora, Ubuntu (установите пакет chkconfig и сервис), Suse.
Вы должны скопировать ваш скрипт в /etc/init.d (это либо правильный каталог, либо ссылка на правильный каталог, так что это будет работать одинаково)
sudo cp jBossServers.sh /etc/init.d/
sudo chmod 0755 /etc/init.d/jBossServers.sh
Затем вам нужно добавить его в процесс запуска системы. Вместо того, чтобы создавать все необходимые ссылки, используйте chkconfig (сначала установите пакет на Ubuntu)
sudo chkconfig add jBossServers.sh
Теперь, читая заголовок вашего сценария, этот сценарий уже содержит информацию для chkconfig относительно уровней запуска и приоритета. Так что у вас все в порядке. При следующей перезагрузке JBoos будет запущен.
Но вы можете попробовать запустить прямо сейчас
sudo service jBossServers.sh start
Примечание: если ваша система жалуется, что не находит chkconfig или сервис, попробуйте вызвать их с помощью /sbin/. Example
sudo /sbin/chkconfig add jBossServers.sh
sudo /sbin/service jBossServers.sh start
Вы можете включить выполнение скрипта при запуске Linux, создав символическую ссылку в /etc/rc
;
является числовым и получается с помощью этой команды (runlevel) Это означает, что уровень выполнения вашей системы Linux.
Например:
# runlevel
вывод:
N 2
Чтобы установить customScript
с приоритетом 99:
ln -s /etc/init.d/customScript /etc/rc2.d/S99customScript