3

Во-первых, как лучше всего выполнять команды при запуске, cron? Могу ли я использовать su в скрипте оболочки для переключения между разными пользователями, если да, то как?

Как создать несколько отдельных сеансов screen при запуске? screen -A -m -d -S test ./script.sh похоже, что он должен работать, но использование его в скрипте, запущенном cron, не показывает никаких сеансов экрана, запущенных после загрузки.

Похоже, что сеанс экрана закрывается после завершения выполнения команды. Могу ли я оставить его открытым, чтобы я мог видеть вывод?

Спасибо!

3 ответа3

7

Чтобы запустить команду при загрузке системы, запланируйте ее для @reboot в cron. Смотрите man 5 crontab для подробностей. Это означает, что ваша строка crontab должна выглядеть

@reboot screen -m ...

Не используйте su для этого, поместите команду в crontab пользователя, который должен запустить команду. Таким образом, пользователь может управлять командами без вмешательства пользователя root. (Но если вы хотите запустить команду от имени системного пользователя, не позволяя этому системному пользователю изменить команду из соображений безопасности, лучше использовать что-то вроде su -c /path/to/command www-data в /etc/rc.local .)

Экран закрывает окно, когда его команда завершается, и завершает сеанс, когда закрывается его последнее окно. Если вы хотите увидеть выходные данные скрипта после его завершения, выполните другую команду после него, чтобы дождаться ввода. Например, чтобы оставить окно открытым, пока вы не нажмете в нем Enter :

screen sh -c './script.sh; read'

Помните, что на экране хранится только ограниченное количество строк истории. Если для script.sh иногда не требуется взаимодействие, вам лучше перенаправить его вывод в файл. Если это требует взаимодействия, вы можете использовать экранную команду log для отправки вывода в файл (и тогда не проблема, если сеанс экрана завершается, когда он не требует ввода).

2

Вы пробовали screen -AmdS test bash -i ./script.sh ?

Я представляю, что происходит то, что запускается экран, на котором запускается сценарий, а затем, когда сценарий завершается, экран завершается. часть bash -i указывает экрану запустить bash в интерактивном режиме, а затем bash запустить скрипт. После выполнения скрипта bash продолжит ждать в командной строке, оставив открытым сеанс экрана, к которому вы можете присоединиться после входа в систему.

1

Создайте скрипт, который делает то, что вы хотите. Если переключение между пользователями выполняется только для одной команды, используйте команду su -c . В противном случае создайте отдельный скрипт и назовите его.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .