У меня есть скрипт, который я хотел бы запустить при запуске моей системы. Я поставил его на "rc.local", но он не работает. Как я могу включить его при запуске?
Где находится команда xsetwacom? /etc/rc.local запускается с очень простым PATH при запуске. Возможно, он отличается от PATH, в который вы вошли в терминал. В терминале введите: type -p xsetwacom, затем замените команду «xsetwacom» в /etc/rc.local на полный путь, возвращаемый «type -p». Вам нужно выполнить какие-либо ручные инициализации, прежде чем xsetwacom будет работать для вас?
Вальтинатор
3
Используя systemd в качестве менеджера автозагрузки, убедитесь, что работает совместимость с rc.local:systemctl status rc-local.service
rubo77
Комментарий вальтинатора был моей проблемой. Из-за минимального пути он не знал, как запускать сценарии, которые я хотел запустить. Путь, загруженный в мою систему Ubuntu 14.04 во время запуска /etc/rc.local, был следующим: / sbin: / usr / sbin: / bin: / usr / bin ... вы можете проверить свой, вставив echo $PATH > /home/rc_local_pathв свой / etc / rc.local, а затем проверяет файл после его запуска при запуске.
RaisinBranCrunch
Имейте в виду, что если ваш скрипт должен работать постоянно, вы должны запустить его какrc.local файл в файле!
Тотемедли
Используйте, sudo systemctl enable rc-local.serviceчтобы убедиться, что /etc/rc.local выполняется во время запуска сервера
Уильям
Ответы:
56
Можете ли вы запустить свой скрипт вручную? Если нет, то это проблема с этим скриптом; в противном случае посмотрите больше на rc.local. (Если этот скрипт должен запускаться с правами root, вам нужно использовать sudo для его запуска вручную.)
Убедитесь, что /etc/rc.local является исполняемым и что вызываемый им скрипт также является исполняемым.
$ ls -l /etc/rc.local-rwxr-xr-x 1 root root 4192010-08-2711:26/etc/rc.local
Убедитесь, что rc.local имеет строку shebang (по умолчанию):
Да, я могу запустить скрипт вручную. Как я могу убедиться, что /etc/rc.local является исполняемым? Что я должен печатать? Это "$ ls -l /etc/rc.local -rwxr-xr-x 1"? Спасибо!
Pedroo
@pedroo: я скопировал именно то, что вижу в своем терминале (так что вы видите подсказку, ввод и вывод всего выше). Это команда "ls -l /etc/rc.local", и, если она выполнима, она будет иметь эти X в выходных данных.
3
Я пробовал "ls -l /etc/rc.local", и он исполняемый, но я не могу запустить его при запуске ... Есть идеи?
Pedroo
1
@pedroo: для этого требуется запустить X-сервер, чего не происходит при выполнении rc.local. Запуск его из rc.local просто завершит работу, ничего не делая (хотя я надеюсь, что он поместит сообщение в системный журнал или где-либо еще). Вам нужно вместо этого поместить команды xsetwacom в ~ / .xinitrc или / etc / X / xinit / xinitrc.
1
@pedroo: потому что rc.local содержит команды, предназначенные для запуска в другое время. Создайте новый файл, вы можете поместить его в ~ / bin , отметить его исполняемым (chmod или свойства в Nautilus), сделать первую строку "#! / Bin / bash", а затем поместить свои команды в более поздние строки.
53
В моем случае ни одна из инструкций не была идеальным решением. Если вам не повезло, как мне, попробуйте этот подробный
Поместите весь исполняемый код в отдельный текстовый файл с произвольным именем, например, foo.sh, и сохраните его в произвольном месте.
Добавлять
#!/bin/sh
как первая строка вашего кода.
Попробуйте запустить свой foo.sh
sudo foo.sh
проверить нет ошибок вообще.
Укажите в вашем скрипте /etc/rc.local полный путь и имя созданного вами скрипта после команды sh
sh '/path/to/your/script/foo.sh'
Не забудьте поставить вышеуказанную строку перед последней строкой кода
exit 0
в конце скрипта /etc/rc.local.
Проверьте первую строку /etc/rc.local, чтобы быть
#!/bin/sh -e
Сделайте ваш /etc/rc.local исполняемым, если он еще не выполняется
Шаг № 8 был ключом, подтверждающим, что скрипт будет работать в среде запуска. В моем случае мне нужно указать полный путь к команде.
Питер Глюк
Префект и шаг за шагом великие, это работает на Centos, но sudo /etc/rc.local startпервый запуск.
A1Gard
Спасибо - эта поломка действительно помогла мне, и, как и выше, шаг № 8 был ключевым для меня тоже! Без этого он не будет перенаправлять +1 (для справки, приложение узла, работающее на облачном сервере bitnami, использует навсегда для непрерывной работы).
Фидев
Шаг 8 был хорошим советом, но я думаю, что шаг 7 может быть тем, что исправило мой, я пытался запустить сценарий, используя cron, чтобы открыть туннель, но он не
удался
28
В более новых версиях Ubuntu systemdиспользуется и /etc/rc.localне загружается всегда по умолчанию.
Проверьте, загружен ли сервис совместимости с
systemctl status rc-local.service
Если он содержит активный (выход), ваши настройки кажутся нормальными, и у вас может быть другая ошибка в вашем /etc/rc.localфайле (например, это может быть команда, которая терпит неудачу).
systemctl status rc-local.service
echo $PATH > /home/rc_local_path
в свой / etc / rc.local, а затем проверяет файл после его запуска при запуске.rc.local
файл в файле!sudo systemctl enable rc-local.service
чтобы убедиться, что/etc/rc.local
выполняется во время запуска сервераОтветы:
Можете ли вы запустить свой скрипт вручную? Если нет, то это проблема с этим скриптом; в противном случае посмотрите больше на rc.local. (Если этот скрипт должен запускаться с правами root, вам нужно использовать sudo для его запуска вручную.)
Убедитесь, что /etc/rc.local является исполняемым и что вызываемый им скрипт также является исполняемым.
Убедитесь, что rc.local имеет строку shebang (по умолчанию):
источник
В моем случае ни одна из инструкций не была идеальным решением. Если вам не повезло, как мне, попробуйте этот подробный
Добавлять
как первая строка вашего кода.
Попробуйте запустить свой foo.sh
проверить нет ошибок вообще.
Укажите в вашем скрипте /etc/rc.local полный путь и имя созданного вами скрипта после команды sh
Не забудьте поставить вышеуказанную строку перед последней строкой кода
в конце скрипта /etc/rc.local.
Проверьте первую строку /etc/rc.local, чтобы быть
Сделайте ваш /etc/rc.local исполняемым, если он еще не выполняется
Проверьте все работает нормально, выполнив
источник
sudo /etc/rc.local start
первый запуск.В более новых версиях Ubuntu
systemd
используется и/etc/rc.local
не загружается всегда по умолчанию.Проверьте, загружен ли сервис совместимости с
Если он содержит активный (выход), ваши настройки кажутся нормальными, и у вас может быть другая ошибка в вашем
/etc/rc.local
файле (например, это может быть команда, которая терпит неудачу).источник
2 предложения.
Целевой скрипт выполняет команду sudo ? Если это так, вы можете предоставить ему пароль sudo.Виноват. Просто отметьте один. Спасибо за исправление энзотиба :)
источник
rc.local
запускается от имени пользователя root, поэтому пароль не требуется.