내 .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 및 스크립트 래퍼 스크립트). 스크립트에서는 작동하지만 별칭은 작동하지 않는 것 같습니다.
어떤 아이디어?
답변
별명에 관한 맨 페이지에서 :
비 대화식 쉘에서는 기본적으로 별칭이 확장되지 않습니다. 'expand_aliases'를 설정하여 활성화 할 수 있습니다 shopt를 사용하는 쉘 옵션.
따라서 shopt -s expand_aliases
소싱 스크립트 시작시 사용하십시오. 이를 통해 워너의 제안을 사용할 수 있습니다.
답변
“source”가있는 bash -c가 작동해야합니다.
0 11 * * * bash -c "source .profile && notify-team"
이것은 또한 작동 할 수 있습니다. 기간은 “소스”를 의미합니다
0 11 * * * . .profile && notify-team
답변
Chris가 식별했듯이 비 대화식 쉘의 기본 쉘 옵션은 별명을 확장하지 않는 것입니다. 내가 찾은 해결책이 있습니다.
스크립트를 작성하고 셸 옵션을 활성화 한 후 별명을 지정하십시오. 특히 .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 / 알림 팀
#!/bin/sh
~/bin/notify.pl -u user1 user2 user3 user4 ....
셸 별칭은 앞에서 본 것처럼 유지 관리하고 다른 시스템에 통합하기가 복잡합니다. 가장 좋은 방법은 환경 문제가 발생하지 않는 본격적인 명령으로 전환하는 것입니다.
답변
bash -ic “notify-team”이 최선의 선택입니다. crontab에서 별칭을 사용할 수있게합니다. -i와 함께 ‘대화식’쉘을 사용하고 있지만 실제로는 상호 작용하지 않으므로 배경에 &를 추가 할 수 있습니다.
답변
0 11 * * * bash -ic "notify-team" > /log/file
나를 위해 일한다