我有一个 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 发送tee
到 /dev/null,但不影响tee
写入指定文件。
答案2
您有七个引用语句/home/user_name/mycron
(顺便说一句,我假设那是,而不是字面上的),还有一个只是简单引用 (即,相对路径名而不是绝对路径名)。如果您运行脚本/home/user_name/mycron
u
s
e
r
_
n
a
m
e
mycron
从 /home/user_name
,它们是等价的。如果您从 运行脚本/root
,则该echo
语句将写入到/root/mycron
。
PS 你绝对不需要这样做chmod +x /home/user_name/mycron
。