Как выполнить cronjob в моей регулярной среде?

Можно изменить последнее cut в Вашем конвейере к этому:

cut -d ' ' -f2-

Вышеупомянутые средства, что разделитель полей является пробелом, и мы хотим выбрать все поля, начинающие со второго. Полная последовательность становится:

cut -d ',' -f1 cities | cut -d ' ' -f2-
5
17.09.2011, 23:54
2 ответа

Можно или явно указать переменные среды, которые Вы хотите наверху Вашего crontab, или можно получить среду от где-нибудь.

Для добавления переменных среды явно можно использовать строку как это наверху сценария (после hashbang):

FOO=bar

Для определения источника их из файла используйте строку как это:

. /foo/bar/baz

В ответ на Ваше редактирование Вашего вопроса включать gpg-agent, необходимо смочь получить ~/.gpg-agent-info добираться $GPG_AGENT_INFO. Если это не существует, попытайтесь запуститься gpg-agent с --write-env-file "${HOME}/.gpg-agent-info".

4
27.01.2020, 20:40
  • 1
    Это работало бы на определенные переменные среды. Я хотел бы, чтобы все они были тем же. –   17.09.2011, 13:36
  • 2
    Затем получите свою среду. Файлы, которые Вы, вероятно, хотите получить, /etc/profile, и Ваш профиль в Вашем локальном каталоге (будет варьироваться между оболочками, для удара ~/.bash_profile). Это даст ему ту же стартовую среду как оболочку входа в систему. –  Chris Down 17.09.2011, 13:39
  • 3
    Спасибо за предложение. Я держал через /etc при поиске инициализации gpg-агента, и это находится в /etc/X11/Xsession.d/60seahorse-plugins. Я немного боюсь отредактировать такой файл, поэтому если бы существует другое решение (например, так или иначе чтение GPG_AGENT_INFO другой среды), я предпочел бы это! –   17.09.2011, 15:17
  • 4
    Нет ничего, чтобы бояться. --write-env-file "${HOME}/.gpg-agent-info" не должен завинчивать ничто больше. Перед редактированием его просто сделайте резервное копирование (с cp /etc/X11/Xsession.d/60seahorse-plugins ~/), и затем если что-то идет не так, как надо (это не было должно), можно просто восстановить его от домашнего dir (не отступайте до того же каталога, или резервное копирование будет все еще выполняться). –  Chris Down 17.09.2011, 15:21

Вы корректны, в котором процессы не должны мочь посмотреть на других средах процесса. Это очень дизайном. Но, export аккуратно упакует Вашу среду, которая будет взята чем-то еще.

То, что можно сделать, является чем-то вроде этого в Вашем .bashrc:

[[ $DISPLAY ]] && export > ~/.cron_bread_crumbs/gonme_env

Затем имейте свое задание крона, просто берут его.

. /home/user/.cron_bread_crumbs/gnome_env

Файл будет полон строк как это:

declare -x ENV_VARIABLE="value"

Значения будут, конечно, заключены в кавычки. Это - то, что я подразумевал под высказыванием 'упакованного аккуратно'.

Определение источника этого (таким образом, вызов declare -x то, которое является экспортом), означает все последующие процессы, которые запускаются (и, возможно, отсоединитесь) от родительского крона также наследует эти значения.

Это немного топорно, тем не менее, потому что это предполагает, что Вы появились открытый один терминал гнома то, чтобы заставлять значения быть обновленными до выполнения крона. Немного исправности в задании крона не должно быть слишком трудным для добавления, как бы то ни было.

Ваша другая опция состоит в том, чтобы запустить что-то в фоновом режиме что просто блоки при дампе среды к именованному каналу, затем позволить заданию крона взять его оттуда. Так или иначе клудж находится в проверке, что что-то происходит через терминал Gnome, таким образом, задание крона получает переменные.

1
27.01.2020, 20:40
  • 1
    Если Ваше намерение в использовании [ $TERM -eq "xterm" ] должен проверить, выполняется ли оболочка в графической среде, чем-то как [[ $DISPLAY ]] && export > ~/.cron_bread_crumbs/gonme_env возможно больше подошел бы (например, это не будет работать на меня, начиная с моего $TERM st-256color). –  Chris Down 17.09.2011, 15:03
  • 2
    @ChrisDown Да, хорошее предложение. Я думал в контексте среды OP.Редактирование. –  Tim Post♦ 17.09.2011, 15:09
  • 3
    Обратите внимание, что Вы, возможно, должны поместить SHELL=/bin/bash в crontab, если Ваша система имеет другую оболочку как /bin/sh (что удар export встроенная печать не читаема в других оболочках, и что пепел). С другой стороны, используйте export команда в другой оболочке такой как ash. Не используйте env утилита, потому что ее вывод не заключается в кавычки правильно. И эта среда, копирующая, может иметь нежелательные последствия, такие как то, чтобы заставлять задание крона верить X дисплеям, или Экранная сессия доступна, когда ни один не. –  Gilles 'SO- stop being evil' 17.09.2011, 23:58

Теги

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