使用 cron 在文件夹中运行多个脚本

bNi*_*bNi 9 bash scripts cron

我正在处理很多脚本。crontab -e所以我多次用“”添加/删除脚本。我尝试为这些创建一个“可用/启用”结构。

\n

示例:
\n这是我的结构树:

\n
# all scripts\nscripts/available/1.sh\nscripts/available/2.sh\nscripts/available/3.sh\n\n# enabled scripts \nscripts/enabled/1.sh -> scripts/available/1.sh\nscripts/enabled/2.sh -> scripts/available/2.sh\n
Run Code Online (Sandbox Code Playgroud)\n

然后我将这一行添加到“ crontab -e”:

\n
* * * * * /home/user/scripts/enabled/* &> /dev/null\n
Run Code Online (Sandbox Code Playgroud)\n

这是以下的输出sudo systemctl status cron.service

\n
     CGroup: /system.slice/cron.service\n             \xe2\x94\x9c\xe2\x94\x8017763 /bin/bash /home/user/scripts/enabled/1.sh /home/user/scripts/enabled/2.sh\n
Run Code Online (Sandbox Code Playgroud)\n

最后:
\n1.sh 每分钟都在工作,但 2.sh 不工作。

\n

我只想从 cron 运行脚本。如果我不想用另一个脚本制作“在目录中运行脚本”的脚本,我该怎么办?

\n

您还知道活跃的“GNU/Linux 系统管理员”的 Telegram 群组吗?

\n

谢谢。

\n

pas*_*ski 13

或者您可以使用run-parts

* * * * * /usr/bin/run-parts --regex='.+' /home/user/scripts/enabled
Run Code Online (Sandbox Code Playgroud)

参数--regex='.+'允许任何文件名。细节:man run-parts

  • 默认情况下,运行部分不接受文件名中的点。将“1.sh”重命名为“1”,依此类推。 (2认同)

miv*_*ivk 5

尝试

for script in /home/user/scripts/enabled/*; do $script &>/dev/null; done
Run Code Online (Sandbox Code Playgroud)


van*_*ium 4

当您指定

/home/user/scripts/enabled/*
Run Code Online (Sandbox Code Playgroud)

cron 看到

/home/user/scripts/enabled/script1.sh /home/user/scripts/enabled/script2.sh ...
Run Code Online (Sandbox Code Playgroud)

因此,您将script1.sh使用该目录中其他脚本的路径名作为参数执行。你的 script1 不读取参数:所以它运行并且运行良好。

相反,cron运行脚本 e 表达式来“不确定 cron 是否按照您认为的方式使用通配符”,然后运行目录中的所有脚本enabled。您可以使用for...do循环来做到这一点。