Как я могу запустить команду at с существующими переменными среды и библиотеками?

Почти дублирующий вопрос этого вопроса , однако ответ в этом посте не решает проблему окружающей среды с командой.

Описание проблемы: я хочу запускать свои сценарии оболочки с помощью команды в качестве запланированного задания. Все мои сценарии оболочки без проблем работают в обычном терминале как в Ubuntu 10.04, так и в 20.04 (3 разные системы). Я получаю все свои результаты, как и ожидалось. Однако, как только я запускаю свой сценарий оболочки с помощью , он вообще не запускается. Вот 3 случая, чтобы продемонстрировать, что работает для простой операции и не работает для сложной операции.

Случай 1

работает с простым скриптом. Ниже все, что моя оболочка script1.sh:

echo $(date) > ~/Desktop/time.txt

Бег at now + 1 minutes -f ~/script1.sh, это экономит время в файле time.txt. Отлично, это означает, что мои функции хорошо.

случай 2

не работает простой скрипт. Ниже приведена вся моя оболочка:

      echo $(date) > ~/Desktop/time.txt
pycharm.sh

работает, он экономит время в файле time.txt, но Pycharm никогда не открывался. Однако , если я бегу sh script2.shбез использования все получилось отлично, я получаю время в файле time.txt, и Pycharm открывается нормально. Я думаю, это просто означает, что не удалось получить все переменные в существующем терминальном окружении. Как только я добавлю export DISPLAY=:1к script2.shв качестве

      echo $(date) > ~/Desktop/time.txt
export DISPLAY=:1
pycharm.sh

тогда at now + 1 minutes -f ~/script2.shбудет работать правильно.

случай 3

Мне нужно запустить следующий сценарий оболочки в качестве запланированного задания:

      gjs -numberofsplits 50 -clusterplatform condor -condorscript condor.script main.mac  > ./output0.txt 2>&1
condor_submit main.submit  > ./output1.txt 2>&1

Обратите внимание, что все эти скрипты нормально работают в терминале с sh script.sh, однако , запустив скрипт с at now + 1 minutes -f ~/script3.sh, выдает ошибку, сохраненную в output0.txtфайл, он говорит

      gjs: error while loading shared libraries: libG4global.so: cannot open shared object file: No such file or directory

Я также пытался использовать абсолютный путь gjs и condor_submit в script3.shкак

      /home/albert/Products9/Gate/Gate-9.0-install/bin/gjs -numberofsplits 50 -clusterplatform condor -condorscript condor.script main.mac  > ./output0.txt 2>&1
/usr/bin/condor_submit  > ./output1.txt 2>&1

но выдает ту же ошибку.


решения уже опробованы

Пока, я думаю, проблема хорошо описана. Я думаю, что причина этой проблемы в том, что команда не имеет доступа ко всем переменным среды, как в обычном терминале.

Вот решения, которые я пробовал, размещенные здесь, в надежде получить доступ ко всем переменным среды atдобавляя

      source $HOME/.profile

или же

      source $HOME/.bashrc

в начало сценария оболочки. Однако это совсем не решает и не облегчает проблему.

просить помощи

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

1 ответ

Одна из причин заключается в том, что планировщик команд по умолчанию не настроен на запуск на дисплее с графическим интерфейсом. Это должно работать, если вы добавите export DISPLAY=:0к myscrpit.shнад линией pycharm.py. Вы можете проверить DISPLAYпеременная, набрав echo $DISPLAYв окне терминала.

Другая причина — переменные окружения. $PATHпеременная в заданиях cron может не содержать всех путей, где находятся исполняемые файлы. Также могут быть файлы библиотеки.

Вы можете проверить путь для исполняемых файлов, набрав which <excutable>(например which gjs). Для каталога библиотеки переменная $LD_LIBRARY_PATHи посмотреть, какие библиотеки он использует, это ldd $(which gjs).

Затем добавьте export PATH=$PATH:<exepath>а также export LD_LIBRARY_PATH=<libpath>на ваш atскрипты.

Другие вопросы по тегам