Назад | Перейти на главную страницу

Как использовать мои псевдонимы в моем crontab?

У меня есть несколько команд в моем .profile что я хочу вызвать из моего crontab.

Например, если у меня есть

alias notify-me="~/bin/notify.pl -u user1"
alias notify-team="~/bin/notify.pl -u user1 user2 user3 user4 ...."

Я хотел бы просто вызвать псевдоним

0 11 * * * notify-team

так что если список в моем .profile обновлено, мне не нужно обновлять crontab, слишком. Однако мне кажется, что я не могу использовать псевдонимы в своих crontab. Есть ли обходной путь?

Я пробовал предложения Вот для настройки среды (например, / bin / bash -lc и скрипт-оболочка). Похоже, это работает для скриптов, но не для псевдонимов.

Любые идеи?

На странице руководства по псевдонимам:

Note aliases are not expanded by default in  non-interactive  shell,
and  it  can  be  enabled  by  setting  the 'expand_aliases'
shell option using shopt.

Так что попробуйте использовать shopt -s expand_aliases в начале вашего сценария поиска. Это должно позволить вам использовать предложение Уорнера.

bash -c с "исходным кодом" должен работать:

0 11 * * * bash -c "source .profile && notify-team"

это тоже может сработать. точка означает "источник"

0 11 * * * . .profile && notify-team

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

Напишите сценарий, включите опцию оболочки и укажите свои псевдонимы. Обратите особое внимание на то, что .bashrc загружается при выполнении, поэтому его необходимо снова получить после включения expand_aliases.

Приношу свои извинения за изначально неверную рекомендацию. Это было более неясно, чем я первоначально ожидал.

Сценарий:

#!/bin/bash
shopt -s expand_aliases
source /home/wmoore/.bashrc
notify-team

Мне нравится идея artifex взять псевдоним из файла и затем повторно использовать его, поскольку я не мог найти способ напрямую расширить / повторно использовать псевдонимы. (Для других решений по-прежнему требовался другой сценарий.)

Итак, я написал эту функцию и поместил ее в свой .profile:

grab-alias () { sed -n '/alias\s*'$1'\s*=/ {s/[^'\'']*.//;s/'\''\s*$//p}' /home/bentrupk/.profile; }

Затем я смог использовать его в своем crontab для различных псевдонимов, например:

0 11 * * * /bin/bash -lc 'x=`grab-alias notify-team`; $x'
0 7 * * * /bin/bash -lc 'x=`grab-alias notify-me`; $x'

и т.п.

Ура, повторное использование кода! Спасибо всем.

На самом деле самое простое, что вы могли бы сделать, - это создать

~ / bin / notify-me с

#!/bin/sh
~/bin/notify.pl -u user1

~ / bin / notify-team с

#!/bin/sh
~/bin/notify.pl -u user1 user2 user3 user4 ....

Как вы видели, псевдонимы оболочки сложно поддерживать и интегрировать в другие системы. Лучше всего превратить их в полноценные команды, у которых не будет забавных проблем с окружением.

bash -ic "notify-team" - лучший вариант. Это делает псевдоним доступным в crontab. Вы также можете добавить & для фона, поскольку мы используем «интерактивную» оболочку с -i, но на самом деле не взаимодействуем с ней.

0 11 * * * bash -ic "notify-team" > /log/file

работает для меня