Как я могу запустить команду 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скрипты.