通过 Bash 脚本运行重复任务

通过 Bash 脚本运行重复任务

我正在运行一些重复性任务,我认为创建一个小型 bash 脚本以便通过一个命令执行所有这些任务会很好:运行 bash 脚本。这是我需要运行的任务:

# stop HTTPD, clear logs, start HTTPD back
service httpd stop
cd /var/log/httpd/
rm -r *
service httpd start

# clear PHP error logs
truncate /var/log/php/php_errors.log --size 0

# clear MySQL error, query and slow logs
truncate /var/log/mysql/mysql_error.log --size 0
truncate /var/log/mysql/mysql_query.log --size 0
truncate /var/log/mysql/mysql_slow.log --size 0

这就是我正在做的:

#! /bin/bash

# stop HTTPD, clear logs, start HTTPD back
service httpd stop
cd /var/log/httpd/
rm -r *
service httpd start

# clear PHP error logs
truncate /var/log/php/php_errors.log --size 0

# clear MySQL error, query and slow logs
truncate /var/log/mysql/mysql_error.log --size 0
truncate /var/log/mysql/mysql_query.log --size 0
truncate /var/log/mysql/mysql_slow.log --size 0

但我一直收到这个错误,我不知道我做错了什么:

bash: ./cleanup.sh: /bin/bash^M: 错误的解释器: 没有这样的文件或目录

我做错了什么和/或遗漏了什么?

答案1

你需要跑dos2unix在您的文件中,该文件可能会以 Windows 文件结尾复制到您的 Linux 发行版中。的^M,又名回车字符,使您的 Linux 发行版认为它需要查找命令bash^M,而不是bash.

要实际查看^M字符,您可以使用以下命令打开文件cat -A

$ cat -A file
# --- comment: expected output below ---
#! /bin/bash^M
# stop HTTPD, clear logs, start HTTPD back^M
service httpd stop^M
cd /var/log/httpd/^M

如果您还没有dos2unix安装,您也可以尝试使用tr命令替换(如所解释的这里):

tr -d '\r' < inputfile > outputfile

相关内容