linux如何不使用sh,连续执行命令?

系统限制了不能使用sh脚本,但可执行命令

我有10个命令的集合,要定期执行
A命令;B命令;C命令;D命令;E命令;
其中E命令用了abcd的变量。
我尝试将命令串分号隔开连接起来直接执行,可以成功

但放入crontab,报错crontab命令太长

怎样能实现这样的效果
6* * * * sh 命令脚本.sh(由于不能使用sh,这条路不行)
或者
6 * * * * A命令;B命令;C命令;D命令;E命令; (太长了,这条路也不行)

那么可否有一种方式,
例如:将 命令串 写入一个a.txt 再用cat读出来,再让它执行? 这个功能怎样实现呢?

类似于
6 * * * * cat 命令串.txt|拿出来执行 (语法不对)
的方式,能够以较短的长度,写到crontab里。
注意我是一串命令叠在一起,后面的命令用了前面的变量。不是多个命令分别执行。

可以用python吗?用python也可以达到sh脚本的功能!

你可以在crontab中直接执行这些命令,每个命令占用一行,例如:

* * * * * commandA
* * * * * commandB
* * * * * commandC

这样每分钟都会依次执行A、B、C命令。

另外,如果命令太长,可以使用bash的单行命令模式,将命令放在一行中,通过分号隔开每个命令,例如:

* * * * * commandA; commandB; commandC

小魔女参考了bing和GPT部分内容调写:
在crontab中实现连续执行多条命令的方法有很多,比如使用shell脚本、使用xargs等。

  1. 使用shell脚本:可以将多条命令写入一个shell脚本,然后将脚本放入crontab中,定时执行脚本,就可以实现连续执行多条命令。

  2. 使用xargs:可以将多条命令放入一个文本文件中,然后使用xargs命令将文件中的每一行命令都执行一次,就可以实现连续执行多条命令。

例如:

# 将多条命令写入一个shell脚本
#!/bin/bash
A命令
8命令
C命令
D命令
E命令

# 将脚本放入crontab中,定时执行脚本
0 0 * * * /path/to/script.sh

# 将多条命令放入一个文本文件中
A命令
8命令
C命令
D命令
E命令

# 使用xargs命令将文件中的每一行命令都执行一次
0 0 * * * xargs -a /path/to/commands.txt

回答不易,记得采纳呀。

参考GPT和自己的思路,你可以在crontab中直接使用分号;将多个命令连接在一起执行。类似于在终端中一样,每个命令之间用分号隔开即可。

示例:

* * * * * command1; command2; command3

这样就可以在每分钟执行 command1, command2 和 command3 三个命令。你可以根据实际需求更改定时执行的时间和命令内容。

“Devil组”引证GPT后的撰写:
用 sh 脚本来运行一系列命令,您可以将这些命令写入一个纯文本文件中,每行一个命令。然后,在 crontab 中,可以使用以下命令执行该文件中的命令:

* * * * * /bin/bash /path/to/your/commands.txt


这将每分钟执行一次 /path/to/your/commands.txt 文件中的所有命令。请注意,如果命令需要使用变量,要确保在将它们写入文件之前将这些变量设置为适当的值。

如果希望以特定的顺序执行命令,可以按照所需的顺序将它们写入文件中。例如:

/path/to/command/A
/path/to/command/B
/path/to/command/C
/path/to/command/D
/path/to/command/E


需要在一个命令执行之后才能使用变量,您可以将这些命令放入同一个 shell 子进程中,如下所示:

(
/path/to/command/A
/path/to/command/B
/path/to/command/C
/path/to/command/D
) && /path/to/command/E


这将执行前四个命令,只有当它们全部成功完成后,才会执行最后一个命令 /path/to/command/E。同样地,可以将这些命令写入文件中,然后在 crontab 中执行该文件。

bash?或者其他工具? 搞成一个shell脚本?或者python之类的实现下?

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
可以尝试将命令串以换行符分隔成多个命令行,然后使用bash的“here document”语法将命令行写入一个新的临时脚本文件中。crontab执行该脚本文件时,即可依次执行命令。

例如,假设要执行的命令串为:

A命令
B命令
C命令
D命令
E命令,其中E命令用了abcd的变量

可以将其转换成以下五个命令行:

command1="A命令"
command2="B命令"
command3="C命令"
command4="D命令"
command5="E命令 \$abcd"

注意到第5个命令行使用了变量$abcd,需要在执行时将其替换成具体的值。

然后,将这五个命令行写入临时脚本文件test.sh中:

cat << EOF > test.sh
$command1
$command2
$command3
$command4
$command5
EOF

其中,EOF是bash的标记,表示以下内容均写入临时文件,直到下一个EOF结束。

接下来,使用chmod命令将test.sh设置为可执行权限:

chmod +x test.sh

最后,将test.sh加入crontab中:

6 * * * * /path/to/test.sh

这样,每隔一个小时,就会执行一次test.sh,其中的五个命令行将依次执行。
如果我的回答解决了您的问题,请采纳!

参考GPT的回答和自己的思路,您可以将这些命令写入一个shell脚本(例如a.sh),然后在crontab中调用该脚本执行命令集合。

例如,您可以在a.sh中编写如下命令:

#!/bin/bash
export abcd="your_variable_value"
A命令
B命令
C命令
D命令
E命令

这里使用了环境变量abdc来传递变量的值。然后,您可以在crontab中添加以下行:

6 * * * * /path/to/a.sh

这将在每小时的第6分钟执行a.sh脚本。您可以使用chmod命令为a.sh添加可执行权限:

chmod +x /path/to/a.sh

这样,您就可以在crontab中直接调用脚本执行命令,而不需要在crontab中直接添加一长串命令。

如果您不想使用脚本文件,您也可以将命令串写入一个a.txt文件中,然后在crontab中使用管道和xargs命令读取该文件中的命令:

6 * * * * cat /path/to/a.txt | xargs bash -c

这将在每小时的第6分钟执行a.txt中的命令串。
回答不易,还请采纳!!!

你这种需求在生产环境中很常见,而且到处可见:
1、在linux系统中定时执行命令, 首先cron。
2、配置cron调度,肯定有长度限制,所以会定义一个【命令执行文件】的shell脚本作为cron的调度, 在这个shell文件中汇聚需要的业务shell脚本。

你要做两个准备:

  1. 基于 crontab 写一个定时器的执行
  2. 写一个sh脚本让定时器去定时调用,就可以了

如果限制仅仅是不能执行sh命令,
执行 chmod +x 执行脚本.sh
6 * * * * * 执行脚本.sh #命令行里去掉sh。
即可。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^