我想在Jenkins上运行一个shell命令,每5秒延迟一次。以下是命令:
cd /cygdrive/c/path/project_name
./scheduler.sh &而在scheduler.sh中是:
#!/bin/sh
sleep="/bin/sleep"
(sleep 5 && ./to_run.sh) &
(sleep 10 && ./to_run.sh) &
(sleep 15 && ./to_run.sh) &
(sleep 20 && ./to_run.sh) &
(sleep 25 && ./to_run.sh) &
(sleep 30 && ./to_run.sh) &
(sleep 35 && ./to_run.sh) &
(sleep 40 && ./to_run.sh) &
(sleep 45 && ./to_run.sh) &
(sleep 50 && ./to_run.sh) &
(sleep 55 && ./to_run.sh) &
(sleep 60 && ./to_run.sh) &它将每5秒运行一次to_run.sh。包含运行python项目的脚本的to_run.sh:
#!/bin/bash
PATH="$PATH;$PYTHON_PATH"
/cygdrive/c/path/venv/Scripts/activate & cd /cygdrive/c/path/project_name& python whatever.py runserver
echo "SUCCESS RUN ALL PYTHON SCRIPTS!"然而,即使构建成功了,我还是从Jenkins那里得到了这个错误:
Started by timer
Running as SYSTEM
Building in workspace C:\Program Files (x86)\Jenkins\workspace\Oncore temp table
$ C:\cygwin64\bin\cygpath -w C:\cygwin64\bin\sh
[Oncore temp table] $ C:\cygwin64\bin\sh.exe -xe C:\WINDOWS\TEMP\jenkins4700784491498255011.sh
+ cd /cygdrive/c/path/project_name
+ ./scheduler.sh
./scheduler.sh: line 3: sleep: command not found
./scheduler.sh: line 3: sleep: command not found
./scheduler.sh: line 3: sleep: command not found
./scheduler.sh: line 3: sleep: command not found
./scheduler.sh: line 3: sleep: command not found
./scheduler.sh: line 3: sleep: command not found
./scheduler.sh: line 3: sleep: command not found
./scheduler.sh: line 3: sleep: command not found
./scheduler.sh: line 3: sleep: command not found
./scheduler.sh: line 3: sleep: command not found
./scheduler.sh: line 3: sleep: command not found
./scheduler.sh: line 3: sleep: command not found
Finished: SUCCESS我已经把cygwin放在Jenkins身上了

请帮帮我!
发布于 2020-07-24 13:09:51
这一点:
PATH="$PATH;$PYTHON_PATH"将$PYTHON_PATH附加到$PATH,但它使用分号作为分隔符。在Cygwin上,sleep位于/usr/bin或/bin中(实际上它们是同一个目录),并且在运行命令的环境中,其中一个目录可能是$PATH中的最后一个目录。因此,您的$PATH的最后一个元素可能类似于/usr/bin;/your/python/path,但它并不存在。
像Unix或Linux一样,Cygwin用冒号而不是分号来分隔$PATH的元素。(我知道Windows使用分号;Cygwin对您隐藏了这一点。)试试这个:
PATH="$PATH:$PYTHON_PATH"此外,还有以下内容:
sleep="/bin/sleep"
(sleep 5 && ./to_run.sh) &将一个名为$sleep的外壳变量设置为/bin/sleep,但这不会使其成为命令名。sleep 5仍然在您的$PATH中搜索sleep命令(您已经把它搞乱了)。
通常,/bin或/usr/bin已经在您的$PATH中,所以只需直接调用sleep 5,它就会找到它。删除sleep="/bin/sleep"行;这不是必需的。
但是,如果您确实希望指定sleep命令的位置,则需要使用shell函数或别名,而不是变量设置。例如,您可以这样做:
alias sleep=/bin/sleep
sleep 5但正如我所说的,这不应该是必要的。
顺便说一下,每5秒运行一次命令的一种更简单的方法是:
for i in {1..12} ; do
sleep 5
./to_run.sh &
donehttps://stackoverflow.com/questions/63066988
复制相似问题