Linux中执行一个Sheel脚本/系统重启后自动执行脚本

Linux中执行一个Sheel脚本

一:编写一个重启Java服务的.sh脚本

  1. Windows中创建一个restart.sh文件

  2. 将一下脚本内容copy中restart.sh文件中

    #!/bin/bash
    
    JAR_NAME="cloud.jar"
    LOG_FILE="restart.log"
    
    # 进入目录
    cd /opt/server/cloudRecord/
    
    # 检查进程是否正在运行
    is_process_running() {
        local process_name=$1
        if pgrep -f "$process_name" >/dev/null; then
            return 0 # 进程正在运行
        else
            return 1 # 进程未运行
        fi
    }
    
    # 终止进程
    kill_process() {
        local process_name=$1
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 终止进程 $process_name" >>$LOG_FILE
        pkill -f "$process_name"
        sleep 5s # 等待5秒钟确保进程已经终止
    }
    
    # 重启Jar文件
    restart_jar() {
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 正在重启 $JAR_NAME" >>$LOG_FILE
        java -jar $JAR_NAME >>$LOG_FILE &
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] $JAR_NAME 重启完成" >>$LOG_FILE
    }
    
    # 检查并重启
    if is_process_running $JAR_NAME; then
        kill_process $JAR_NAME
    fi
    
    restart_jar
    
  3. 将脚本上传到Linux中的目录下面

  4. 脚本说明:

    1.在脚本开头使用#!/bin/bash指定解释器为Bash。
    2.确保将该脚本保存为可执行文件,可以通过chmod +x restart.sh命令为脚本添加执行权限。
    要执行这个脚本,在终端中导航到包含脚本的目录,然后运行./restart.sh命令即可。
    
  5. 异常问题:

    直接上传到linux当中执行,报错:-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory

    image-20230815180321707

    解决方法:

    image-20230815180705185

    解决方式:
    错误原因之一很有可能是你的脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.
    
    1.vim test.sh中,
    2.执行set ff  命令,可以看到当前文件的格式类型
    3.强制将dos类型转为unix
    4.执行set ff=unix
    5.wq保存重新执行即可
    
    还有一种方式可以用:dos2unix  test.sh 命令转换编码;
    

二:配置Liunx重启后自动执行某个命令

1、crontab -e命令

crontab -e命令用于编辑当前用户的cron作业。
当你运行crontab -e命令时,会打开一个文本编辑器(通常是vi或nano),用于编辑cron作业的计划任务列表。每个用户都有一个单独的cron表,可以用来设置定期执行的任务。
在编辑器中,你可以按照cron的语法添加、修改或删除作业。每一行代表一个作业,包含了cron时间表达式和要执行的命令。

以下是一个示例的crontab文件:

# 每天凌晨2点执行备份脚本
0 2 * * * /path/to/backup.sh

# 每周日晚上10点清理临时文件
0 22 * * 7 /path/to/cleanup.sh

# 每小时运行自动更新任务
0 * * * * /path/to/update.sh


保存并退出编辑器后,cron作业将根据指定的时间表自动运行。

注意:在编辑crontab文件之前,请确保你具有适当的权限,并且知道如何使用所选的文本编辑器。如果不确定如何编辑cron作业,请参考编辑器的相关文档或使用crontab命令的帮助页(man crontab)。

2、步骤方法:

image-20230815190046434

1.输入:crontab -e
2.将 
  @reboot sleep 60 && sh /opt/server/cloudRecord/start.sh
  加进任务列表中,此命令代表:意味着在服务器重新启动后,等待60秒后执行/opt/server/cloudRecord/start.sh脚本
3.wq保存
4.重启服务器命令:sudo shutdown -r now        reboot -f
5.重启后重新验证服务已经自动重启成功

如果在服务器重启后没有自动启动脚本,请检查以下几个方面:
脚本路径和文件权限:确保/opt/server/cloudRecord/start.sh脚本的路径和文件名正确,并且具有执行权限。你可以使用
ls -l /opt/server/cloudRecord/start.sh命令来检查文件权限。

crontab配置是否正确:使用crontab -e命令打开cron表进行编辑,并确认以下内容是否正确:

@reboot sleep 60 && sh /opt/server/cloudRecord/start.sh
保存并退出编辑器。

系统日志:查看系统日志文件(如/var/log/syslog、/var/log/messages等)以获取与cron作业相关的错误消息。这些日志文件可能包含有关任何错误或警告的线索。

手动测试脚本:尝试手动执行脚本以确定是否存在任何错误。在终端中运行以下命令来测试脚本:

sh /opt/server/cloudRecord/start.sh

如果脚本能够正常运行,但在cron作业中无法正常工作,则可能需要进行其他调试。


检查cron服务状态:确保cron服务正在运行。使用以下命令检查cron服务状态:
service cron status
如果cron服务未启动,请使用以下命令启动它:
service cron start

猜你喜欢

转载自blog.csdn.net/weixin_45285213/article/details/132305193