我正在处理很多脚本。crontab -e所以我多次用“”添加/删除脚本。我尝试为这些创建一个“可用/启用”结构。
示例:
\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\nRun Code Online (Sandbox Code Playgroud)\n然后我将这一行添加到“ crontab -e”:
* * * * * /home/user/scripts/enabled/* &> /dev/null\nRun Code Online (Sandbox Code Playgroud)\n这是以下的输出sudo systemctl status cron.service:
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\nRun Code Online (Sandbox Code Playgroud)\n最后:
\n1.sh 每分钟都在工作,但 2.sh 不工作。
我只想从 cron 运行脚本。如果我不想用另一个脚本制作“在目录中运行脚本”的脚本,我该怎么办?
\n您还知道活跃的“GNU/Linux 系统管理员”的 Telegram 群组吗?
\n谢谢。
\npas*_*ski 13
或者您可以使用run-parts:
* * * * * /usr/bin/run-parts --regex='.+' /home/user/scripts/enabled
Run Code Online (Sandbox Code Playgroud)
参数--regex='.+'允许任何文件名。细节:man run-parts。
尝试
for script in /home/user/scripts/enabled/*; do $script &>/dev/null; done
Run Code Online (Sandbox Code Playgroud)
当您指定
/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循环来做到这一点。