Intereting Posts
Поиск альтернативного графического редактора файлов с большой поддержкой файлов Самый быстрый способ суммирования N-го столбца в текстовом файле Как запустить сценарий при изменении разрешения? Как запретить `mv` перемещать коллекцию файлов в один обычный? Насколько хорошо AMD Radeon HD 7950 gpu будет работать на Linux? резервная команда `cpio` не работает? Каковы различные кэши, о которых сообщает slabtop? Показать все Панировочные сухари в Наутилусе Копирование файла с диска DVD не выполняется Проблема масштабирования с использованием разрешения Ultra HD между ноутбуком и монитором Обратное подключение к серверу SSH Как защитить системы Linux от удаленной атаки BlueBorne? Почему шрифты все ввернуты для удаленных приложений X11 на одном клиенте Mac? Автоматическая копия нового ядра для `/ boot / efi` при обновлении ядра Автоматические (ish) cgroups с systemD

Как запустить скрипт Bash при запуске в Linux?

Я использую Linux 4.9.11-1.0.0 на моей плате разработки для iMX7. У меня есть файл test.sh который я хотел бы запустить при запуске. В настоящее время он содержит только несколько echo операторов (только для целей тестирования).

Когда я щелкаю выключатель на плате, чтобы включить его, я вижу кучу вещей для инициализации. Я хотел бы, чтобы операторы echo в моем файле test.sh также отображались в этой последовательности инициализации при запуске. В конце концов, когда это сработает, план состоит в том, чтобы делать реальные вещи вместо простых echo операторов. Я просто хочу убедиться, что скрипт запускается при запуске в этот момент.

До сих пор я создал файл test.sh и смог запустить его вручную после загрузки платы. Я добавил следующее в мой /etc/rc.local перед оператором выхода в конце:

 sh '/home/root/test.sh' 

Я rc.local что в этом файле rc.local находится #!/bin/sh -e rc.local #!/bin/sh -e . Я также сделал:

 $ chown root /etc/rc.local $ chmod 777 /etc/rc.local 

После того, как все это было сделано, я убедился, что он должен работать правильно, набрав:

 $ /etc/init.d/rc.local start 

До этого момента все работает, как и ожидалось, и я вижу echo заявления, когда я делаю последний шаг. Тем не менее, когда я иду и пытаюсь перезагрузить плату, я не вижу echo операторов вообще в печатных материалах инициализации.

Что мне не хватает? Может быть, это на самом деле работает при запуске, но я просто не вижу выход по какой-то причине?

Если вы сделали все, например, chmod +x /etc/rc.local то ваша команда выполняется, она просто нигде не регистрируется, чтобы вы могли ее увидеть.

пример

Это мой /etc/rc.local :

 $ cat /etc/rc.local #!/bin/bash touch /var/lock/subsys/local echo "hickory stick" 

Здесь я использовал модифицированный Bash, который регистрирует в системном журнале, который я обсуждал в этой другой статье вопросов и ответов под названием: Отправка истории bash в системный журнал .

Когда моя система загружается, я вижу следующее сообщение, которое регистрируется через Bash:

/var/log/bash-log/127.0.0.1.log:2018-07-24T22:04:24.609094-04:00 centos7 rc.local: палка гикори

Но не где еще. Чтобы заставить это войти в syslog / rsyslog, вы обычно можете использовать команду logger для этого:

 $ logger hi 

Вы можете увидеть это в ваших /var/log/messages или /var/log/syslog или journal -xef . Здесь я использую journald:

 $ journalctl -xef Jul 24 20:23:04 centos7 bash[1629]: HISTORY: PID=1629 UID=0 USER=root CMD=man logger Jul 24 20:23:24 centos7 bash[1629]: HISTORY: PID=1629 UID=0 USER=root CMD=logger hi Jul 24 20:23:24 centos7 vagrant[1811]: hi 

Вы должны быть в состоянии использовать logger для захвата вывода команд в сценариях, например так:

 $ cat /etc/rc.local #!/bin/bash touch /var/lock/subsys/local echo "hickory stick" | logger 

Теперь, когда мы перезагружаемся:

 $ journalctl -xef ... Jul 24 20:31:41 centos7 bash[1629]: HISTORY: PID=1629 UID=0 USER=root CMD=journalctl -xe Jul 24 22:24:00 centos7 logger[1286]: hickory stick Jul 24 22:24:00 centos7 sshd[1270]: Server listening on 0.0.0.0 port 22. Jul 24 22:24:00 centos7 sshd[1270]: Server listening on :: port 22. Jul 24 22:24:00 centos7 systemd[1]: Starting Permit User Sessions... 

Мы видим наше сообщение там через logger который мы добавили в /etc/rc.local .

Дополнительная информация

logger довольно полезен, и вы можете сделать так, чтобы он записывал в файл вместо ключа -f , вы также можете контролировать тег, который отображается в журналах, с помощью ключа -t .

 $ logger -t "smurfs" hi $ journalctl -xe | grep smurfs Jul 24 20:38:24 centos7 smurfs[1764]: hi 

Рекомендации

  • Сценарии оболочки: запись сообщения в файл системного журнала / журнала

Вы пытались вставить его в свой .bash_profile? Это файл, который запускается при входе в систему. Так что он не включается, когда все входят в систему или технически при запуске … но если вы используете одного пользователя, это может быть простым решением для того, что вам нужно.

Перейдите в свой домашний каталог, который, если вы root, на самом деле / ​​root, а не / home / root (по крайней мере, в дистрибутиве, с которым я знаком. Возможно, «echo $ HOME» для подтверждения вашего домашнего каталога.)

Оказавшись там, сделайте:

 ls -la 

Должен увидеть скрытый файл с именем .bash_profile. Откройте его и посмотрите. Большинство комментирует некоторые инструкции. Вы можете запустить свой скрипт прямо там или просто вызвать его с помощью:

sh '/home/root/test.sh'