Терминал Gnome — это приложение X (Приложение с графическим интерфейсом ). Если вы хотите запустить какое-либо X-приложение из cron, просто «дайте ему знать», какой дисплей вы используете, поскольку cron
не выполняет команды в вашей обычной среде оболочки.
Прежде всего определите, какой дисплей используется в вашей системе:
echo $DISPLAY
Вывод будет примерно таким:
:0
или
:1
Предположим, что ваша переменная DISPLAY
имеет значение :1
, затем добавьте в свой сценарий перед командой с помощью переменной DISPLAY=:1
приложения с графическим интерфейсом, т. е.:
#!/bin/bash
DISPLAY=:1 gnome-terminal -x sh -c 'zenity --info --text="Msg1" --title="Text1..." --timeout=10;<some_command>;zenity --info --text="Msg2" --title="Text2..." --timeout=10;<some_command>;zenity --info --text="Msg3" --title="Reboot..." --timeout=10;sleep 1; exec bash'
Помимо cron
в CentOS есть еще одна возможность запустить что-то однократно при старте системы-rc-local
служебный механизм. Создайте (, если он еще не создан )файл:
/etc/rc.d/rc.local
с содержанием:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/path/to/script.sh
exit 0
Поместите в файл все команды, которые вы хотите выполнять при запуске.
Сделать файл rc.local
исполняемым:
chmod +x /etc/rc.d/rc.local
Включите службу rc-local
и запустите ее:
systemctl enable rc-local
systemctl start rc-local
Проверьте, правильно ли работает служба:
systemctl status rc-local
Да, используйте ForceCommand в конфигурации sshd _. Это хорошо описано на странице руководства для sshd _config :
.https://linux.die.net/man/5/sshd_config
Чтобы продолжить соединение, вы просто выполняете исходную команду (, хранящуюся в SSH_ORIGINAL_COMMAND
env. переменная )в вашем скрипте-оболочке.
Возможно, я вас неправильно понял, но если вы хотите запустить команду в контексте сервера, а не ForceCommand
, которая запускается для пользовательского соединения, вы можете использовать установку SSHD с активацией через сокет, которая описана здесь:
http://0pointer.de/blog/projects/socket-activated-containers.html
Если вы хотите запускать скрипты до запуска sshd
, используйте несколько операторов ExecStart
, где sshd
— последний.