• Как в crontab ubuntu перезапускать сервис?

    password22
    @password22 Автор вопроса
    В моем случае пришлось сделать вот что.

    Чтобы перезапускать сайт на asp.net по таймеру пришлось создавать отдельно таймер + сервис + скрипт перезапуска.

    То есть в итоге должно быть:
    1. site.service -сам сервис запуска сайта ​
    2. siteRestart.service - сервис, ссылающийся на скрипт с перезапуском
    3. siteRestart.timer - таймер для сервиса перезапуска
    4. siteRestart.sh - скрипт с перезапуском


    site.service
    [Unit]
    Description=Example .NET Web API App running on Ubuntu
    
    [Service]
    WorkingDirectory=/var/www/helloapp
    ExecStart=/usr/bin/dotnet /var/www/helloapp/helloapp.dll
    Restart=always
    # Restart service after 10 seconds if the dotnet service crashes:
    RestartSec=10
    KillSignal=SIGINT
    SyslogIdentifier=dotnet-example
    User=www-data
    Environment=ASPNETCORE_ENVIRONMENT=Production
    Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
    
    [Install]
    WantedBy=multi-user.target


    siteRestart.service
    [Unit]
    Description=siteRestartService
    
    [Service]
    Type=simple
    ExecStart=/usr/local/bin/siteRestart.sh
    
    [Install]
    WantedBy=multi-user.target


    siteRestart.timer
    [Unit]
    Description=RestartSiteDaily
    
    [Timer]
    OnCalendar=daily
    Unit=siteRestart.service
    Persistent-true
    
    [Install]
    WantedBy=multi-user.target


    siteRestart.sh
    #!/bin/bash
    systemctl restart site.service


    далее

    sudo chmod 744 /usr/local/bin/siteRestart.sh
    sudo chmod 644 /etc/systemd/system/siteRestart.service

    sudo systemctl daemon-reload

    sudo systemctl start siteRestart.service siteRestart.timer

    sudo systemctl enable siteRestart.service siteRestart.timer

    sudo systemctl status siteRestart.service siteRestart.timer

    Только так всё заработало!
    Ответ написан
    Комментировать
  • Не приходят данные из js fetch в asp net, почему?

    password22
    @password22 Автор вопроса
    Все работает, вот так:

    HTML
    <div class="container">
    
        <h1>Регистрация на сайте</h1>
    
        <form action="#" method="post" id="form_UserRegistration">
    
            <label for="input_UserName">Имя</label>
            <input type="text" name="UserName" id="input_UserName" />
    
            <label for="input_UserEmail">Email</label>
            <input type="text" name="UserEmail" id="input_UserEmail" />
    
            <label for="input_UserAge">Возраст</label>
            <input type="number" name="UserAge" id="input_UserAge" />
    
            <button type="submit">Зарегистрироваться</button>
    
        </form>
    
    </div>


    JS
    <script>
    
        const form = document.getElementById('form_UserRegistration');
    
        fetch('http://localhost:24068/home/index', {
            method: 'POST',
            body: JSON.stringify(Object.fromEntries(new FormData(form)))
        }).then(function (response) {
            // Стоит проверить код ответа.
            if (!response.ok) {
                // Сервер вернул код ответа за границами диапазона [200, 299]
                return Promise.reject(new Error(
                    'Response failed: ' + response.status + ' (' + response.statusText + ')'
                ));
            }
    
            // Далее будем использовать только JSON из тела ответа.
            return response.json();
        }).then(function (data) {
            console.log(data);
        }).catch(function (error) {
            console.log(error);
        });
    
    </script>


    C# asp.net mvc
    [HttpPost]
            public async Task<IActionResult> Index(IFormCollection form)
            {
                var createSql = @"INSERT INTO UsersTable (UserName, UserEmail, Age) VALUES (@UserName, @UserEmail, @Age)";
    
                var usersSql = @"SELECT * FROM UsersTable";
    
                using (var connection = new SqlConnection(CONNECTION_STRING))
                {
                    var usersCreate = await connection.QueryAsync<UserModel>(createSql, new { @UserName = form["UserName"], @UserEmail = form["UserEmail"], @Age = form["UserAge"] });
                    var usersTable = await connection.QueryAsync<UserModel>(usersSql);
                    return View(usersTable);
                }
            }
    Ответ написан
    Комментировать
  • AJAX при нажатии на тег area (интерактивные карты html)?

    password22
    @password22 Автор вопроса
    Справился сам. Если кому пригодится:
    html
    <div class="map">
    		<img src="img.png" class="map maphilighted" usemap="#simple">
    	</div>
    
    	<map name="simple">
    		<area id="first" class="all" shape="poly" coords="78,14,75,29,71,3,20,96,28">
    		<area id="second" class="all" shape="poly" coords="73,38,50,4,79,118,62,105,48,95,41">
    	</map>
    
    	<div class="data">
            </div>


    js
    $(document).ready(function(){
        $('.all').click(function() {
        	var name = ($(this).attr('id')); 
            $.ajax({
    			url: 'a.php',
    			method: 'post',
    			dataType: 'html',
    			data: {name:name},
    				success: function(data){
    					$('.data').html(data);
    				}
    		});
    		return false;
        });
    });


    a.php
    if($_POST['name'] == 'first') {
    	echo 'Это первый';
    } elseif($_POST['name'] == 'second') {
    	echo 'Это второй';
    }
    Ответ написан
    Комментировать