xf.li | 335dd32 | 2025-09-08 00:22:56 -0700 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # |
xf.li | ffccc8b | 2025-09-08 01:20:15 -0700 | [diff] [blame^] | 3 | # Run the daemon with CPU cgroup limitation |
xf.li | 335dd32 | 2025-09-08 00:22:56 -0700 | [diff] [blame] | 4 | # |
| 5 | |
| 6 | DAEMON="lynq-fota-backup-service" |
| 7 | PIDFILE="/var/run/$DAEMON.pid" |
| 8 | EXEC="/usr/bin/lynq-fota-backup" |
| 9 | EXEC_ARGS="" |
| 10 | |
xf.li | ffccc8b | 2025-09-08 01:20:15 -0700 | [diff] [blame^] | 11 | # Cgroup配置 |
| 12 | CGROUP_NAME="fota_backup" |
| 13 | CGROUP_PATH="/sys/fs/cgroup/cpu/$CGROUP_NAME" |
| 14 | CPU_LIMIT="20000" # 20% CPU (100000 = 100%) |
| 15 | |
| 16 | # 创建Cgroup并设置CPU限制 |
| 17 | setup_cgroup() { |
| 18 | if [ ! -d "$CGROUP_PATH" ]; then |
| 19 | mkdir -p "$CGROUP_PATH" |
| 20 | echo "$CPU_LIMIT" > "$CGROUP_PATH/cpu.cfs_quota_us" |
| 21 | echo "100000" > "$CGROUP_PATH/cpu.cfs_period_us" |
| 22 | echo "Cgroup $CGROUP_NAME created with 20% CPU limit" |
| 23 | else |
| 24 | echo "Cgroup $CGROUP_NAME already exists, updating limit" |
| 25 | echo "$CPU_LIMIT" > "$CGROUP_PATH/cpu.cfs_quota_us" |
| 26 | fi |
| 27 | } |
| 28 | |
| 29 | # 将进程添加到Cgroup |
| 30 | add_to_cgroup() { |
| 31 | PID=$1 |
| 32 | if [ -d "$CGROUP_PATH" ]; then |
| 33 | echo "$PID" > "$CGROUP_PATH/tasks" |
| 34 | echo -n "Process $PID added to Cgroup $CGROUP_NAME" |
| 35 | else |
| 36 | echo -n "ERROR: Cgroup $CGROUP_PATH does not exist!" |
| 37 | fi |
| 38 | } |
xf.li | 335dd32 | 2025-09-08 00:22:56 -0700 | [diff] [blame] | 39 | |
| 40 | start() { |
xf.li | ffccc8b | 2025-09-08 01:20:15 -0700 | [diff] [blame^] | 41 | sleep 600 |
| 42 | echo "Starting $DAEMON with 20% CPU limit... " |
| 43 | setup_cgroup |
| 44 | start-stop-daemon --no-close -S -b -m -p $PIDFILE -x $EXEC -- $EXEC_ARGS |
| 45 | RETVAL=$? |
| 46 | if [ $RETVAL -eq 0 ]; then |
| 47 | PID=$(cat $PIDFILE 2>/dev/null) |
| 48 | if [ -n "$PID" ]; then |
| 49 | add_to_cgroup "$PID" |
| 50 | else |
| 51 | echo "WARNING: Failed to read PID from $PIDFILE" |
| 52 | fi |
| 53 | echo "OK" |
| 54 | else |
| 55 | echo "ERROR" |
| 56 | fi |
xf.li | 335dd32 | 2025-09-08 00:22:56 -0700 | [diff] [blame] | 57 | } |
| 58 | |
| 59 | stop() { |
| 60 | echo -n "Stopping $DAEMON... " |
| 61 | start-stop-daemon -K -p $PIDFILE |
| 62 | [ $? -eq 0 ] && echo "OK" || echo "ERROR" |
| 63 | } |
| 64 | |
| 65 | restart() { |
xf.li | ffccc8b | 2025-09-08 01:20:15 -0700 | [diff] [blame^] | 66 | stop |
| 67 | start & |
xf.li | 335dd32 | 2025-09-08 00:22:56 -0700 | [diff] [blame] | 68 | } |
| 69 | |
| 70 | case "$1" in |
xf.li | ffccc8b | 2025-09-08 01:20:15 -0700 | [diff] [blame^] | 71 | start) |
| 72 | start & |
| 73 | ;; |
| 74 | stop|restart) |
xf.li | 335dd32 | 2025-09-08 00:22:56 -0700 | [diff] [blame] | 75 | "$1" |
| 76 | ;; |
xf.li | ffccc8b | 2025-09-08 01:20:15 -0700 | [diff] [blame^] | 77 | *) |
xf.li | 335dd32 | 2025-09-08 00:22:56 -0700 | [diff] [blame] | 78 | echo "Usage: $0 {start|stop|restart}" |
| 79 | exit 1 |
| 80 | esac |
| 81 | |
| 82 | exit $? |
| 83 | |
xf.li | ffccc8b | 2025-09-08 01:20:15 -0700 | [diff] [blame^] | 84 | |