다른 시스템에서 원격으로 실행하려는 bash 스크립트가 있습니다. 원격 시스템의 사용자에게 cronjob을 추가하기만 하면 됩니다.
내 로컬 시스템에서 실행하고 있습니다.
ssh root@remote_system 'bash -s < /home/user_name/test2.sh'
이것은 원격 시스템에서 실행되는 스크립트입니다.
#!/bin/bash
set -x
#valhost=$(hostname)
if [ -d /home/user/junk ]
then
touch /var/spool/cron/user_name
crontab -l -u user_name > /home/user_name/mycron
chmod +x /home/user_name/mycron
echo "0 0 * * * /bin/find /home/user_name \( -name '*' \) -mtime +45 -delete" >> /home/user_name/mycron
crontab -u user_name /home/user_name/mycron
elif [ -d /home/user_name/tmp ]
then
touch /var/spool/cron/user_name
crontab -l -u user_name > /home/user_name/mycron
chmod +x /home/user_name/mycron
echo "0 0 * * * /bin/find /home/user_name \( -name '*' \) -mtime +60 -delete" >> mycron
crontab -u user_name /home/user_name/mycron
else
echo "directory does not exist on" $HOSTNAME > /home/user_name/jbossjunk
fi
디렉토리가 존재하는지 확인한 다음 특정 항목을 crontab에 넣습니다. 실제 원격 시스템에서 스크립트를 실행하면 스크립트가 제대로 실행됩니다. 하지만 로컬에서 실행하면 에코가 "mycron" 파일로 출력되지 않습니다. 여러 곳을 검색했지만 작동하는 구문을 찾지 못했습니다. 나는 좋은 결과를 얻지 못한 채 여러 구문 변형을 시도했습니다. 원격으로 스크립트를 실행하는 데 사용할 수 있는 "echo" 줄의 구문을 알려줄 수 있는 사람이 있나요?
답변1
출력이 처리되는 tee
방식 이 .tee
echo
if [ -d /home/user/junk ]
then
touch /var/spool/cron/user_name
crontab -l -u user_name > /home/user_name/mycron
chmod +x /home/user_name/mycron
tee /home/user_name/mycron <<-EOF &>/dev/null
0 0 * * * /bin/find /home/user_name \( -name '*' \) -mtime +45 -delete
EOF
crontab -u user_name /home/user_name/mycron
elif
heredoc
이 예에서는 지정된 파일을 읽습니다 tee
. 명령 &>/dev/null
의 STDOUT 및 STDERR을 /dev/null로 보내지만 지정된 파일에 쓰는 데에는 tee
영향을 주지 않습니다 .tee
답변2
7개의 참조 문이 있습니다 /home/user_name/mycron
(그런데 문자 그대로는 아닌 것으로 가정합니다). 하나는 단순한 참조(즉, 절대 경로 이름이 아닌 상대 경로 이름)입니다. 스크립트를 실행하면/home/user_name/mycron
u
s
e
r
_
n
a
m
e
mycron
~에서 /home/user_name
, 그들은 동일합니다. 에서 스크립트를 실행하면 /root
이 echo
명령문이 에 기록됩니다 /root/mycron
.
추신: 절대 이렇게 할 필요는 없습니다 chmod +x /home/user_name/mycron
.