У меня есть несколько команд в моем .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
работает для меня