Разрешения Проблемы с командой в rc.local

Я использую команду для запуска сеанса экрана и запуска скрипта bash для пользователя.

/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"

Когда я загружаюсь, я вижу, что сеанс сеанса отображается для этого пользователя, но когда я его открываю, я вижу отказ в разрешении.

Я проверил разрешения на файл, и это: -rw-rw-r-- 1 username www-data 816 Feb 18 00:59 test.sh

У кого-нибудь есть теория, почему я вижу эту ошибку? Я могу запустить сценарий без проблем, когда я зарегистрировался как имя пользователя.

test.sh не является исполняемым. Таким образом, вы можете запустить его, передав его в качестве аргумента для оболочки, как в bash /home/username/test.sh , но вы не можете запустить его напрямую в виде программы, например, в вашей команде примера. Запустите chmod +x /home/username/test.sh чтобы сделать его исполняемым.

Если test.sh делает такие вещи, как установка переменных среды, они выживают только на протяжении всего процесса. Поэтому, если вы запустите /home/username/test.sh; exec bash /home/username/test.sh; exec bash то окончательная интерактивная оболочка не будет иметь переменных среды из этого процесса. Чтобы сохранить переменные среды, установите их в родительском процессе bash: введите сценарий, а не запускайте его как отдельную программу.

 /bin/su username -c "/usr/bin/screen -dmS test bash -c '. ~/test.sh; exec bash'"