#!/bin/bash
value=$(<man.txt)
echo "$value"

if [ "$value" == "true" ]; then
    echo "startedif_manthan"
      ps -ef|grep sym |awk '{ print $2 }'|sudo  xargs kill -9;
      sleep 30;
    sudo sh /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server;
fi

Мне нужно запустить вышеуказанный скрипт в cron. Будет ли он выполняться в cron без пароля?

Какие-либо предложения?

2 ответа2

2

Я лучше выложу скрипт, похожий на:

#!/bin/sh
read value < /path/to/man.txt

if [ "$value" = "true" ]; then
    pkill -u root '^sym$' && sleep 30
    sh /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server
fi

Так как вы все равно хотите запускать каждую команду как root, поместите ее в crontab root. Если вам не нужно запускать что-либо как root, не делайте этого. Если вам действительно нужно запустить его через sudo помощью специально настроенных прав для определенных приложений, верните sudo , но учтите, что вам также понадобятся специально сконфигурированные права для уничтожения программы (если она не имеет эквивалента --kill ).

Я удалил echo поскольку ненужные операторы печати в crontab будут просто загромождать логи. Вы можете реализовать механизм регистрации в скрипте, если это необходимо.

0

Вы можете настроить sudo чтобы не требовать пароль:

  1. Сделайте /var/www/symmetric-ds-3.1.6/bin/sym исполняемым:

    $ chmod a+x /var/www/symmetric-ds-3.1.6/bin/sym
    
  2. Замените в своем скрипте:

    sudo sh /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server
    

    с:

    sudo /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server
    
  3. Используйте visudo чтобы добавить следующую строку в /etc/sudoers:

    <user who runs the cronjob> ALL = NOPASSWD:/path/to/xargs [-0-9 a-z]*, /var/www/symmetric-ds-3.1.6/bin/sym [-0-9 a-z]*
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .