Однако почти повторяющийся вопрос из этого , ответ в этом сообщении не решает проблему окружающей среды с командой at
.
Описание проблемы:
Я хочу запустить свои сценарии оболочки с командой at
в качестве запланированного задания. Все мои сценарии оболочки без проблем работают в обычном терминале как в Ubuntu 10.04, так и в 20.04 (3 разные системы). Я получаю все свои результаты, как и ожидалось. Однако как только я запускаю свой сценарий оболочки с по адресу
, он вообще не запускается. Вот 3 случая, чтобы продемонстрировать, что в
работает для простых операций и не работает при сложных.
case 1
at
работает с простым скриптом. Ниже приводится все, что моя оболочка script1.sh
:
echo $ (date)> ~ / Desktop / time.txt
работает сейчас + 1 минута -f ~ / script1.sh
, это экономит время в файле time.txt. Отлично, значит, мой по адресу
работает нормально.
case 2
at
дает сбой в простом сценарии. Ниже приведено все, что моя оболочка script2.sh
:
echo $(date) > ~/Desktop/time.txt
pycharm.sh
работает сейчас + 1 минута -f ~ / script2.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
, тогда сейчас + 1 минута -f ~ / script2.sh
будет работать правильно .
case 3
Мне нужно запустить следующий сценарий оболочки с в
в качестве запланированного задания, script3.sh
:
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
, однако , при запуске сценария с сейчас + 1 минута -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
в начало сценария оболочки. Однако это совсем не решает и не облегчает проблему.
с просьбой о помощи
Могу я попросить помощи у вас, специалиста в этой области, в решении этой проблемы. Поскольку эта проблема может также беспокоить многих других пользователей. Большое спасибо.
Одна из причин заключается в том, что планировщик команд at
не настроен для работы на экране графического интерфейса пользователя по умолчанию. Он должен работать, если вы добавите export DISPLAY =: 0
в myscrpit.sh
над строкой pycharm.py
. Вы можете проверить переменную DISPLAY
, набрав echo $ DISPLAY
в окне терминала.
Другая причина - переменные среды. Переменная $ PATH
в заданиях cron может не содержать все пути, по которым находятся исполняемые файлы. Также могут быть файлы библиотеки.
Вы можете проверить путь к исполняемым файлам, набрав which
(например, which gjs
). Для каталога библиотеки это переменная $ LD_LIBRARY_PATH
, а чтобы увидеть, какие библиотеки она использует, это ldd $ (which gjs)
.
Затем добавьте экспорт PATH = $ PATH:
и export LD_LIBRARY_PATH =
в свои сценарии в
.