![使用 cron 在文件夹中运行多个脚本](https://linux22.com/image/942605/%E4%BD%BF%E7%94%A8%20cron%20%E5%9C%A8%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E8%BF%90%E8%A1%8C%E5%A4%9A%E4%B8%AA%E8%84%9A%E6%9C%AC.png)
我正在使用许多脚本。因此,我确实crontab -e
多次使用“ ”添加/删除脚本。我尝试为这些脚本创建“可用/已启用”结构。
例如:
这是我的树:
# all scripts
scripts/available/1.sh
scripts/available/2.sh
scripts/available/3.sh
# enabled scripts
scripts/enabled/1.sh -> scripts/available/1.sh
scripts/enabled/2.sh -> scripts/available/2.sh
然后我将这一行添加到“ crontab -e
”中:
* * * * * /home/user/scripts/enabled/* &> /dev/null
这是输出sudo systemctl status cron.service
:
CGroup: /system.slice/cron.service
├─17763 /bin/bash /home/user/scripts/enabled/1.sh /home/user/scripts/enabled/2.sh
最后:
1.sh每分钟都在工作,但是2.sh不工作。
我只想从 cron 运行脚本。如果我不想用另一个脚本编写“在目录中运行脚本”的脚本,我该怎么办?
您是否还知道任何活跃的“GNU/Linux 系统管理员” Telegram 群组?
谢谢。
答案1
或者你也可以使用run-parts
:
* * * * * /usr/bin/run-parts --regex='.+' /home/user/scripts/enabled
参数--regex='.+'
允许任何文件名。详细信息:man run-parts
。
答案2
尝试
for script in /home/user/scripts/enabled/*; do $script &>/dev/null; done
答案3
当您指定
/home/user/scripts/enabled/*
cron 看到
/home/user/scripts/enabled/script1.sh /home/user/scripts/enabled/script2.sh ...
因此,您将以script1.sh
该目录中其他脚本的路径名作为参数执行。您的 script1 不读取参数:因此它可以运行,并且运行良好。
相反,cron
运行一个脚本 e 表达式“不确定 cron 是否像您想象的那样使用通配符”,然后运行目录中的所有脚本enabled
。您可以使用for
...do
循环来执行此操作。