Совместное использование переменных среды между zsh и оболочкой Bourne (для crontab)

На самом деле, лучший способ корректно закрыть соединение — отправить заголовок Content-Length, как показано ниже. Клиент (, как и curl, закроет соединение после получения данных.

DATA="Date: $(date)"; 
LENGTH=$(echo $DATA | wc -c);
echo -e "HTTP/1.1 200 OK\nContent-Length: ${LENGTH}\n\n${DATA}" | nc -l -p 8000;
0
23.03.2021, 23:09
2 ответа

Предполагая, что вы ссылаетесь на crontab вашего собственного пользователя, чтобы избежать дублирования определения JAVA_HOME, вы можете exportиспользовать переменную в~/.zshenv(вместо ~/.zshrc), которая читается даже в не -интерактивном режиме, не -оболочки входа в систему и запустите zsh -c 'sh /path/to/script'в своем задании cron (, заменив sh, исходя из того, что на самом деле представляет собой программа, называемая «оболочкой Bourne» в вашем вопросе, если это уместно ).

В качестве альтернативы, если вы согласны с определением JAVA_HOMEв нескольких местах и ​​если ваша shреализация поддерживает это 1 , вы можете exportего в ~/.profileи вызвать shкак оболочку входа в систему, либо добавив -lк shebang скрипта, либо изменив команду задания cron на sh -l /path/to/script.

Хотя, в конце концов, наиболее удобным решением будет просто добавить

JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/

в виде строки в верхней части вашего crontab (, если у вас нет отдельных заданий cron, которым нужны разные значения JAVA_HOME, конечно ).


1Ваш sh, который вряд ли будет «настоящей» оболочкой Борна, может иметь параметр -l, если он на самом деле является ссылкой на (, например)bashили dash. Как Stéphane Chazelas указал в комментарии , 1 ), он не имеет его, если это оболочка Bourne или реализация POSIX sh(, например, shне имеет опции -lв {Free,Net,Open}BSD ); и 2 )не все реализации, поддерживающие -l, будут читать ~/.profileпри наличии этой опции.

1
28.04.2021, 22:57

Вы можете установить это в обоих общесистемных конфигурационных файлах соответственно/etc/bash.bashrc(/etc/bashrcв системах, отличных от -Debian )и/etc/zsh/zshenv(/etc/zshenv

Поскольку синтаксис тот же, вы можете просто скопировать -вставить

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/

что в обоих файлах

0
28.04.2021, 22:57

Теги

Похожие вопросы