【问题标题】:setting up cron Job from bash is giving errors从 bash 设置 cron 作业会出错
【发布时间】:2023-03-27 16:10:02
【问题描述】:

我正在尝试使用 bash 脚本在远程服务器中设置 cron Job。命令如下:

ssh $NODE_USER@$NODE_HOST "cat <(crontab -l) <(echo "33 03 * * 0-6 $Scripts_dir/runStaticHTML.sh -c $Scripts_dir/staticHTML.conf") | crontab - "

当我直接在服务器内部执行这个命令时,它运行良好。但是当我通过这个 Bash 运行时,它给出了以下错误

copysetup.sh: command substitution: line 68: syntax error near unexpected token `('
copysetup.sh: command substitution: line 68: `cat <(crontab -l) < (echo "33 03 * * 0-6 $Scripts_dir/runStaticHTML.sh -c $Scripts_dir/staticHTML.conf") | crontab - '

它最终会登录到远程服务器。

当我退出服务器时,它会给出以下错误。 Vim:警告:输出不是终端 Vim:警告:输入不是来自终端

【问题讨论】:

  • 看起来ssh 服务器正在运行脚本undef sh,而不是bash,因此无法使用&lt;(...) 进行进程替换。

标签: linux bash shell cron


【解决方案1】:

ssh 服务器使用sh 运行命令,而不是bash,所以它不理解&lt;(command)(这是一个bash 扩展)。

您不需要为此使用进程替换。试试:

ssh $NODE_USER@$NODE_HOST "(crontab -l; echo '33 03 * * 0-6  $Scripts_dir/runStaticHTML.sh -c $Scripts_dir/staticHTML.conf') | crontab -"

还要注意变量$Scripts_dir 在本地机器上展开,而不是在服务器上。

【讨论】:

  • 嗨 Barmar。谢谢你的建议。我已经尝试了上面的命令。它仍然是相同的行为。当我运行脚本时它会 ssh 并登录到服务器,然后它没有继续.有没有其他方法可以从 sh 脚本设置 cron 作业。
  • 我犯了一个错误,你不能在字符串中转义双引号。我把它们改成了单引号。
  • 嗯,我收回了。单引号不允许转义,双引号可以。我不知道为什么它对你失败了。不过还是试试新版本吧。
猜你喜欢
  • 2016-01-29
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多